फ़ाइलों की तुलना करने के कई तरीके हैं rsync - आधिकारिक स्रोत rsync एल्गोरिथम विवरण है: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridg396 .pdf । विकिपीडिया लेख rsync पर भी बहुत अच्छा है।
स्थानीय फ़ाइलों के लिए, rsync मेटाडाटा की तुलना करता है और यदि ऐसा लगता है कि इसे फ़ाइल को कॉपी करने की आवश्यकता नहीं है क्योंकि स्रोत और गंतव्य के बीच आकार और टाइमस्टैम्प मेल से आगे नहीं दिखता है। यदि वे मेल नहीं खाते हैं, तो यह cp की फाइल है। हालाँकि, अगर मेटाडेटा मैच करता है, लेकिन फ़ाइलें वास्तव में समान नहीं हैं? तब rsync ने शायद वह नहीं किया जो आप करना चाहते थे।
समान आकार वाली फ़ाइलें अभी भी परिवर्तित हो सकती हैं। एक सरल उदाहरण एक पाठ फ़ाइल है जहाँ आप एक टाइपो को ठीक करते हैं - जैसे "तेह" को "द" में बदलना। फ़ाइल का आकार समान है, लेकिन सही फ़ाइल में एक नया टाइमस्टैम्प होगा। --size-only
कहते हैं, "समय पर मत देखो; अगर आकार मैच फाइलों के मेल से मेल खाता है", जो इस मामले में गलत विकल्प होगा।
दूसरी ओर, मान लीजिए कि आपने गलती से एक बड़ा cp -r A B
कल कर लिया था, लेकिन आप समय टिकटों को संरक्षित करना भूल गए, और अब आप रिवर्स में ऑपरेशन करना चाहते हैं rsync B A
। उन सभी फ़ाइलों को जिन्हें आपने cp'ed किया है, कल का समय स्टाम्प है, भले ही वे वास्तव में कल संशोधित नहीं हुए थे, और rsync डिफ़ॉल्ट रूप से उन सभी फ़ाइलों की प्रतिलिपि बना लेगा, और टाइमस्टैम्प को कल भी अपडेट कर देगा। --size-only
इस मामले में आपका मित्र हो सकता है (ऊपर दिए गए उदाहरण को मापता है)।
--ignore-times
फ़ाइलों की तुलना करने के लिए कहते हैं, भले ही फ़ाइलों में एक ही समय संशोधित हो। ऊपर दिए गए टाइपो उदाहरण पर विचार करें, लेकिन तब न केवल आपने टाइपो को ठीक किया था, बल्कि आपने touch
सही फ़ाइल बनाने के लिए मूल फ़ाइल के समान ही संशोधित समय दिया था - मान लें कि आप इस तरह से डरपोक हैं। आकार और समय के मेल के बावजूद , --ignore-times
फ़ाइलों का एक अच्छा हिस्सा होगा ।