গন্তব্যে বিদ্যমান ফাইলগুলি প্রতিস্থাপন না করে scp করুন


158

গন্তব্য ডিরেক্টরিতে সামগ্রীর স্থান না নিয়ে আমি কীভাবে একটি সম্পূর্ণ ডিরেক্টরিকে একই নামের একটি ডিরেক্টরিতে অনুলিপি করব? (পরিবর্তে, আমি গন্তব্য ফোল্ডারের সামগ্রীগুলিতে যুক্ত করতে চাই)


হ্যাঁ, এটা হল একটি দরকারী প্রোগ্রাম / উপযোগ যে এক নেই যখন বিরক্তিকর "যদি শুধুমাত্র এটি করতে পারে ..." বিকল্পটি! এই ক্ষেত্রে "--noclobber"!
মাইকডাব্লু

উত্তর:


139

আপনি যদি কেবল মূল ডিরেক্টরিতে নতুন যে ফাইলগুলি আপডেট করতে চান বা ইতিমধ্যে গন্তব্যে বিদ্যমান সমস্ত ফাইল এড়িয়ে যেতে চান তবে ব্যবহার করুন rsyncএবং পাস করুন ।-u--ignore-existing

rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/

( /উত্স দিকে নোট করুন : এটি rsyncতৈরি না করে /remote/directory/directory))


@ অ্যান্টন আমি আপনার মন্তব্য বুঝতে পারি না এবং আমি চন্দ্রের কোনও উত্তর বা মন্তব্য দেখতে পাচ্ছি না। --ignore-existingপ্রতিস্থাপন না করে যোগ করে, আপনি কোন ডেটা ক্ষতি দেখেন?
গিলস

দুঃখিত, আমি কেবলমাত্র আপনার প্রথম উদাহরণটির দিকে চেয়েছিলাম যেখানে আপনি ডেটা হারাতে পারেন (এবং ওপি যা বলেছিল তা IMHO নয়), যদি আপনি অন্তর্ভুক্ত করেন --ignore- বিদ্যমান ডেটা-ক্ষতি না ঘটে।
অ্যান্থন

রিমোট সিস্টেমে rsyncসহজে উপলব্ধ না হলে এটি সাহায্য করে না .... (উইন 32-ওপেনএসএইচ এর মত)
গার্ট ভ্যান ডান বার্গ

উইন্ডোজে উইন্ডোজে ইনস্টল করা বেশ সহজ আর্টসিন্ডের চেয়ে শক্ত আর সহজ নেই
গিলস

@ গিলস: সত্য, তবে সমস্ত বিকল্প সিগুইন ডিএলএলগুলিকে জড়িত বলে মনে হচ্ছে ... (ওপেনএসএইচ-এর এমএস পোর্টের বর্তমান অবস্থা এমন যে এসসিপি ভেঙে দেওয়ার জন্য স্ক্র্যাপে কমপেনশন সক্ষম করা যথেষ্ট ...) (উইন 32 এর উপর আরএসসিএনসি কার্যকর হওয়া) -ওপেনএসএইচও অ-তুচ্ছ মনে হয় - আশা করি সময়ের সাথে উন্নতি হয়) (সোলারিস 10 অন্য উদাহরণ, যেখানে তৃতীয় পক্ষের প্যাকেজ রয়েছে এবং --rsync-pathএটি প্রয়োজন)
গার্ট ভ্যান ডান বার্গ

82

আপনার কাছে লেখার অনুমতি থাকলে scp ফাইলগুলি ওভাররাইট করে।

অন্য কথায়: আপনি scpফাইলগুলিকে সাময়িকভাবে লেখার অনুমতিগুলি মুছে ফেলার মাধ্যমে কার্যকরভাবে এড়িয়ে যেতে পারেন (যদি আপনি ফাইলগুলির মালিক হন তবে তা)।


5
এর জন্য ধন্যবাদ. ঠিক সেই কৌশলটিই আমি খুঁজছিলাম।
স্যাকারিন

নিশ্চিত করুন যে আপনি ফাইলগুলি অনুলিপি করেছেন যাতে আপনি এটি করতে * যুক্ত করেছেন। উদাহরণscp -r user@server.com:/location/of/files/* /local/location/
রিক ২

1
খুঁজে। -প্রকার চ-এক্সেক ক্লাউন মূল: মূল {} \;
লিংক

1
অস্বাভাবিক ক্ষেত্রে যে ডিরেক্টরিতে কেবলমাত্র কিছু ফাইল ওভাররাইট করা হবে (যদি "সুরক্ষিত না হয়") এবং ফাইল অনুমতিগুলির মধ্যে ফাইলের অনুমতিগুলি অভিন্ন নয়, এই সমাধানটি কাজ করতে পারে না। অন্যথায়, এটি বেশ সহজ এবং কার্যকর।
sancho.s 20'18

উইন্ডোতে এটি করতে সমস্ত ফাইল নির্বাচন করুন, -> বৈশিষ্ট্য -> কেবল পঠন করতে ডান ক্লিক করুন
বেনজ্যামিন

12

আপনি তারিখ দ্বারা শুধুমাত্র নতুন ফাইল অনুলিপি করতে পারেন। ব্যবহারfind

scp  `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/

+7 এর অর্থ কী?
ফ্রান্সিস কিম

@ ফ্রেঞ্চিসকিম এর অর্থ 7 দিন আগে সংশোধিত হয়েছে। সুতরাং এই ক্যোয়ারীটি গত 7 দিনের মধ্যে যে কোনও * .gz ফাইলগুলি পরিবর্তন করুন নির্বাচন করুন
ভাদিম এরিমিয়েভ

4
+7 আসলে 7 দিনেরও বেশি আগে বোঝায় না?
জেফ এইচ।

1
হ্যাঁ এর অর্থ "7 দিনেরও বেশি আগে"। কে এই upvated কোন ধারণা।
স্টিফান রেইচ

9

আপনি যদি গন্তব্য ফাইলের সামগ্রীগুলি কেবল পঠন করতে পারেন:

find . -type f -exec chmod a-w '{}' \;

চালানোর আগে scp(এটি অভিযোগ করবে এবং বিদ্যমান ফাইলগুলি এড়িয়ে যাবে)।

এবং সেগুলি পরে পরিবর্তন করুন ( chmod +wউমাস্ক ভিত্তিক মান পেতে)। আপনার উমাস্ক অনুসারে যদি ফাইলগুলির সকলের লেখার অনুমতি না থাকে তবে আপনাকে কোনওভাবে অনুমতিগুলি সংরক্ষণ করতে হবে যাতে আপনি সেগুলি পুনরুদ্ধার করতে পারেন।

(গিলসের উত্তর বিদ্যমান ফাইলগুলি নতুনতর হলে ওভাররাইট করে দেয়, আমি সেভাবে মূল্যবান ডেটা হারিয়েছি that কেন ভুল এবং ক্ষতিকারক উত্তরে এত বেশি ভোট রয়েছে তা বুঝতে পারছি না)।


2
আমি এটি পাই না: কীভাবে rsync --ignore-existingআপনাকে ডেটা হারাতে হয়েছিল?
গিলস

4
আমি ভুল পেয়েছিলাম find: missing argument to '-exec'এই কমান্ড ব্যবহার করে, এবং এর পরিবর্তে ব্যবহার করার জন্য ছিল: find . -type f -exec chmod a-w {} \;। আমার লিনাক্স খারাপ, ymmv।
wpearse

এটি একটি আরও ভাল এবং নিরাপদ উত্তর। অনুমতি পরিবর্তন করার সঠিক কমান্ডটি হ'ল @ পিয়ার্সির উল্লিখিত হিসাবে:find . -type f -exec chmod a-w {} \;
আমির

6

আমি একটি অনুরূপ কাজের ছিল, আমার ক্ষেত্রে আমি ব্যবহার করতে পারি নি rsync, csyncঅথবা ফিউজ কারণ আমার স্টোরেজ শুধুমাত্র এসএফটিপি হয়েছে। rsyncফাইলটির তারিখ এবং সময় পরিবর্তন করতে পারেনি, কিছু অন্যান্য ইউটিলিটিস (যেমন csync) আমাকে অন্যান্য ত্রুটিগুলি দেখিয়েছিল: " অস্থায়ী ফাইল তৈরি করতে অক্ষম ক্লক স্কিউ সনাক্ত হয়েছে "।

আপনার যদি স্টোরেজ-সার্ভারে অ্যাক্সেস থাকে - কেবল এখানে ডেমন হিসাবে ইনস্টল করুন openssh-serverবা লঞ্চ rsyncকরুন।

আমার ক্ষেত্রে - আমি এটি করতে পারিনি এবং সমাধানটি ছিল: lftplftpসিঙ্ক্রোনাইজেশনের জন্য ব্যবহার নীচে:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder- আমার পিসির ফোল্ডারটি /rem/folderহ'ল - sftp://sft.domain.tld/rem/folder

আপনি লিঙ্কটি দ্বারা ম্যান পেজগুলি পেতে পারেন: http://lftp.yar.ru/lftp-man.html


6

পুরো একগুচ্ছ ফাইল অনুলিপি করতে, এগুলি দ্রুত বাড়ানো দ্রুত। -কে ব্যবহার করে আপনি টার্গেট সিস্টেমে আনপ্যাক করে ফেলার ফাইলগুলি ওভাররাইট করা থেকে আটকাতে পারেন।

tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>' 

1
এটি একটি দূরবর্তী সংযোগ তৈরি করে। প্রথমে এটি উত্সটির ট্যার, এটি এসএসএস সংযোগে পাইপ দেয় এবং এটি রিমোট সিস্টেমে আনপ্যাক করে।
huembi

-1

scpফাইলগুলি ওভাররাইট করে এবং এটি করা বন্ধ করার কোনও সুইচ নেই, তবে আপনি জিনিসগুলি অনুলিপি করতে পারেন, স্কিপটি করতে পারেন এবং তারপরে বিদ্যমান ফাইলগুলি অনুলিপি করতে পারেন। উদাহরণ:

  1. সমস্ত বিদ্যমান ফাইল অনুলিপি করুন

    mkdir original_files ; cp -r * original_files/
    
  2. Scp ব্যবহার করে সমস্ত কিছু অনুলিপি করুন

    scp -r user@server:dir/* ./
    
  3. Scp লিখেছেন যে কোনও কিছুতে আসল ফাইলগুলি অনুলিপি করুন:

    cp -r original_files/* ./
    

3
আপনি যখন কোনও দূরবর্তী থেকে ফাইলগুলি টানতে এবং আপনি যেখান থেকে ছেড়ে গিয়েছিলেন সেখান থেকে তুলতে চাইলে এই পদ্ধতিটি সাহায্য করবে না। অর্থ্যাৎ যদি পুরো উদ্দেশ্যটি সময় সাশ্রয় করা হয়।
অলিভার উইলিয়ামস 17

-1

এটি অর্জনের আরেকটি উপায় হ'ল lsগন্তব্য ফোল্ডারে কাজ করা:

দূরবর্তী গন্তব্য ফোল্ডারে:

ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder

উত্স উপর:

cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data

গন্তব্যস্থলে:

scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer

দয়া করে এটি করবেন না। 1. এলএস পার্স করবেন না । ২. কোনও ফাইলনামে - >স্পেস নিউলাইন বা অন্যান্য বিশেষ অক্ষর থাকলে উত্তরটি বিপজ্জনক । ৩. পাইথন স্ক্রিপ্টের জন্য হার্ড-কোড একটি লুপ। রানটাইমের সময় একটি প্রোগ্রাম তৈরি করা বেশ জটিল এবং জটিল (পেশাদার প্রোগ্রামারদের দ্বারা করা হলেও) বেশ কয়েকটি কারণে। শেল স্ক্রিপ্ট তৈরি করা আরও খারাপ - একটি ভয়ঙ্কর ধারণা।
অজানা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.