इस तुलना को करने का एक अच्छा तरीका है , findसाथ में उपयोग करना ।md5sumdiff
उदाहरण
निर्देशिका में सभी फ़ाइलों को सूचीबद्ध करने के लिए खोज का उपयोग करें फिर प्रत्येक फ़ाइल के लिए md5 हैश की गणना करें और फ़ाइल के लिए फ़ाइलनाम द्वारा छाँटे गए पाइप:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
दूसरी निर्देशिका के लिए भी यही प्रक्रिया करें:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
फिर परिणाम की तुलना दो फाइलों के साथ करें diff:
diff -u dir1.txt dir2.txt
या प्रक्रिया प्रतिस्थापन का उपयोग कर एक एकल कमांड के रूप में:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
यदि आप केवल परिवर्तन देखना चाहते हैं:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
कट कमांड केवल हैश (पहला क्षेत्र) को अंतर से तुलना करने के लिए प्रिंट करता है। अन्यथा डिफरेंशियल हर लाइन प्रिंट करेगा क्योंकि हैश समान होने पर भी डायरेक्टरी पाथ अलग-अलग होते हैं।
लेकिन आपको नहीं पता होगा कि कौन सी फाइल बदली ...
उसके लिए, आप कुछ इस तरह की कोशिश कर सकते हैं
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
यह रणनीति बहुत उपयोगी है जब दो निर्देशिकाओं की तुलना एक ही मशीन में नहीं की जाती है और आपको यह सुनिश्चित करने की आवश्यकता है कि फाइलें दोनों निर्देशिकाओं में समान हैं।
नौकरी करने का एक और अच्छा तरीका है Git की diffकमांड का उपयोग करना (जब फ़ाइल की अलग-अलग अनुमतियाँ हो सकती हैं - तो हर फ़ाइल आउटपुट में सूचीबद्ध होती है:
git diff --no-index dir1/ dir2/
bash --version?