আমি বিশ্বাস করি আপনি এটি করতে ব্যবহার করতে পারেন rsync
। মূল পর্যবেক্ষণটি --existing
ও --update
সুইচগুলি ব্যবহার করা প্রয়োজন ।
--existing skip creating new files on receiver
-u, --update skip files that are newer on the receiver
এটির মতো একটি আদেশ এটি করবে:
$ rsync -avz --update --existing src/ dst
উদাহরণ
বলুন যে আমাদের নীচের নমুনা ডেটা আছে।
$ mkdir -p src/; touch src/file{1..3}
$ mkdir -p dst/; touch dst/file{2..3}
$ touch -d 20120101 src/file2
যা দেখতে নিম্নলিখিত:
$ ls -l src/ dst/
dst/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3
src/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file1
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3
এখন আমি যদি এই ডিরেক্টরিগুলি সিঙ্ক করতে পারি তবে কিছুই হবে না:
$ rsync -avz --update --existing src/ dst
sending incremental file list
sent 12 bytes received 31 bytes 406.00 bytes/sec
total size is 0 speedup is 0.00
যদি আমাদের touch
উত্স ফাইল থাকে যাতে এটি আরও নতুন হয়:
$ touch src/file3
$ ls -l src/file3
-rw-rw-r--. 1 saml saml 0 Feb 27 01:04 src/file3
rsync
কমান্ডের আর একটি রান :
$ rsync -avz --update --existing src/ dst
sending incremental file list
file3
sent 115 bytes received 31 bytes 292.00 bytes/sec
total size is 0 speedup is 0.00
আমরা এটি দেখতে পাচ্ছি file3
, যেহেতু এটি আরও নতুন, এবং এটি বিদ্যমান রয়েছে dst/
, এটি প্রেরণ হয়ে যায়।
পরীক্ষামূলক
কমান্ডটি শিথিল করার আগে জিনিসগুলি কাজ করছে তা নিশ্চিত করার জন্য, আমি অন্য কোনও rsync
সুইচ ব্যবহার করার পরামর্শ দিই --dry-run
,। এর অন্য একটি যোগ করুন -v
খুব তাই rsync
এর আউটপুট আরো বাগাড়ম্বরপূর্ণ হয়।
$ rsync -avvz --dry-run --update --existing src/ dst
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
file1
file2 is uptodate
file3 is newer
total: matches=0 hash_hits=0 false_alarms=0 data=0
sent 88 bytes received 21 bytes 218.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
rsync --archive --update --existing --whole-file --itemize-changes a/ b
। বা এই বিকল্পগুলির বেশিরভাগই অপ্রয়োজনীয়? (আমি পুরো ফাইলটি যুক্ত করেছি কারণ এগুলি বেশিরভাগ ছোট টেক্সট ফাইল))