सुधार और विकल्प स्पष्टता के लिए संपादन - मैं भूल गया - 'दुख'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
और जो आप तुलना कर रहे हैं उसके आधार पर स्वाद के लिए अन्य विकल्प जोड़ें:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs ओरिजिनल और कॉपी के हर बाइट को पढ़ेगा, और रिपोर्ट की गई फाइलों को समान करेगा।
पोसिक्स द्वारा भिन्न आउटपुट प्रारूप को परिभाषित किया गया है, इसलिए यह बहुत पोर्टेबल है। आप कुछ जोड़ना चाह सकते हैं जैसे:
| टी डिफरेंस-आउट १ | grep -v -Ee 'फ़ाइलें। * और। * समान हैं'
आप chksums या hashes का उपयोग कर सकते हैं, लेकिन फिर आपको उन्हें फ़ाइल पेड़ों के साथ सिंक करना होगा, इसलिए आप हर फ़ाइल के हर बाइट को वैसे भी पढ़ने के लिए वापस आ जाएंगे।
EDIT - प्रतिक्रिया के लिए एक टिप्पणी के रूप में बहुत लंबा है:
10GB से अधिक की फाइलें सत्यापित नहीं हो रही हैं
आप इस भिन्न विकल्प को आज़माना चाहते हैं: --speed-large-files
यह संभव है कि आप जिस फॉर्म का उपयोग कर रहे हैं वह बहुत बड़ी फ़ाइलों (उदाहरण के लिए सिस्टम मेमोरी से बड़ी) के साथ अच्छी तरह से मुकाबला नहीं कर रहा है, और इस प्रकार उन फ़ाइलों के बीच अंतर की रिपोर्ट कर रहा है जो वास्तव में समान हैं।
मैंने सोचा था कि वहाँ एक -एच विकल्प या एक 'bdiff' है जो बड़ी फ़ाइलों पर बेहतर करता है, लेकिन मुझे फेडोरा में एक नहीं मिल सकता है। मेरा मानना है कि --स्पीड-लार्ज-फाइल्स विकल्प '-h' "हाफ-हार्टेड तुलना" विकल्प का उत्तराधिकारी है।
आपके द्वारा उपयोग किए गए rsync आदेश को दोहराने के लिए एक अलग तरीका होगा, '-vin' (क्रिया, आइटम, no_un) के साथ। यह किसी भी अंतर की रिपोर्ट करेगा जो rsync पाता है - और कोई भी नहीं होना चाहिए।
कुछ फ़ाइलों को स्थानांतरित करने के लिए, आप एक स्क्रिप्ट देख रहे हैं जैसे:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
लेकिन मैं ऐसा करने की सलाह नहीं देता। अंतर्निहित प्रश्न "मैं कैसे सुनिश्चित कर सकता हूं कि rsync ने फ़ाइल पदानुक्रम को सही तरीके से कॉपी किया है?" और यदि आप अपने आप को प्रदर्शित कर सकते हैं कि rsync अच्छी तरह से काम कर रहा है, अंतर या किसी अन्य उपकरण के साथ, तो आप बस इसके चारों ओर काम करने के बजाय rsync पर भरोसा कर सकते हैं।
rsync -vin आपके द्वारा दिए गए अन्य विकल्पों के आधार पर तुलना करेगा। मैंने सोचा कि यह चेकसम के लिए डिफ़ॉल्ट है, लेकिन आप सही हैं, उसके लिए -c या --checksum आवश्यक है।
टेक्स्ट की लाइनों की फ़ाइलों के लिए वास्तव में अलग उपयोगिता का इरादा है, लेकिन यह बाइनरी फ़ाइलों के लिए 'समान' अंडर-एस की रिपोर्ट करना चाहिए।
Thebrief को किसी भी फ़ाइल सामग्री आउटपुट को दबा देना चाहिए - इसे पहले देखने की मेरी माफी - यह एक बदसूरत स्क्रिप्ट में अर्ध-दफन था।