मुझे विश्वास है कि आप ऐसा करने के 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
:। या उन विकल्पों में से अधिकांश अनावश्यक हैं? (मैंने पूरी फाइल जोड़ दी क्योंकि ये ज्यादातर छोटी पाठ फाइलें हैं।)