मैं @ user1464130 द्वारा उत्तर को अनुकूलित करता हूं क्योंकि फ़ाइल नामों में रिक्त स्थान को संभालने में समस्या होती है।
cd dir1
find . -type f -printf "%p %s\n" | sort > ~/dir1.txt
cd dir2
find . -type f -printf "%p %s\n" | sort > ~/dir2.txt
diff ~/dir1.txt ~/dir2.txt
प्रत्येक फ़ाइल पर एक कमांड का शुभारंभ और रिपोर्ट में परिणाम का उपयोग करना चाहते हैं, तो आप while
बैश निर्माण का उपयोग कर सकते हैं। यह उदाहरण प्रत्येक फ़ाइल के लिए चेकसम की गणना करने के लिए md5sum
का उपयोग करता है।
find . -maxdepth 1 -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done
प्रत्येक $()
अलग से मार डाला और हमें प्रत्येक फ़ाइल के लिए चेकसम गणना करने के लिए अनुमति देता है। tr
का उपयोग प्रत्येक लगातार रिक्त स्थान को एक ही स्थान पर निचोड़ता है और cut
एन-वें स्थिति में शब्द को पहले स्थान पर निकाल देता है। अगर हम ऐसा नहीं करते हैं, तो हमें फ़ाइल का नाम दो बार मिलता है क्योंकि md5sum
इसे वापस स्टडआउट पर देता है।
तुलना का उपयोग किए बिना यहां एक उदाहरण है (diff
)। ध्यान दें कि मैंने प्रत्येक फ़ाइल के बारे में आउटपुट किए गए तीन डेटा पर जोर देने के लिए -
का उपयोग किया है, लेकिन यदि आप इसे किसी अन्य प्रोग्राम में फ़ीड करना चाहते हैं तो यह एक समस्या हो सकती है।
$ find . -maxdepth 1 -name "*.c" -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done
./thread.c - 5f2b7b12c7cd12fcb9e9796078e5d15b - 584
./utils.c - d61bc1dbc72768e622a04f03e3b8f7a2 - 3413
एक-लाइनर समाधान संबंधित यूनिक्स StackExchange सवाल मिला: http://unix.stackexchange.com/q/62140 – tanius