अद्यतन: जब से मैंने इस उत्तर को पोस्ट किया है, कुछ साल हो गए हैं और इस बीच मैंने कई बार यहां प्रस्तुत की गई स्क्रिप्ट को फिर से लिखा और सुधार किया है। मैंने नई स्क्रिप्ट को एक नए उत्तर के रूप में प्रतिष्ठित करने का निर्णय लिया है। मैं इसे इस पर अत्यधिक अनुशंसा करूंगा।
परिचय
मैंने देखा है कि जिस क्रम में एक निर्देशिका के भीतर पाया गया कमांड आउटपुट तत्वों को अलग-अलग विभाजनों पर समान निर्देशिकाओं के भीतर बदलता रहता है। यदि आप उसी निर्देशिका के हैश की तुलना कर रहे हैं, तो आपको इस बारे में चिंता करने की ज़रूरत नहीं है, लेकिन यदि आपको यह सुनिश्चित करने के लिए हैश मिल रहा है कि कॉपी के दौरान कोई फ़ाइल छूटी या दूषित नहीं हुई, तो आपको इसके लिए एक अतिरिक्त लाइन शामिल करने की आवश्यकता है निर्देशिका की सामग्री को छाँटना और यह तत्व है। उदाहरण के लिए, मैथ्यू बोहन्सक का उत्तर काफी सुरुचिपूर्ण है:
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum
लेकिन अगर आप इसका उपयोग कॉपी किए गए डायरेक्टरी की तुलना करने के लिए कर रहे हैं तो यह मूल है, आप आउटपुट को एक txt फ़ाइल में भेज देंगे, जिसकी आप अन्य निर्देशिका से आउटपुट सूची की तुलना करेंगे Kom Kom या WinMerge का उपयोग करके या बस प्रत्येक लिस के हैश को प्राप्त करके। । बात यह है कि जिस क्रम में खोज उपकरण आउटपुट करेगा, वह सामग्री एक निर्देशिका से दूसरी में भिन्न हो सकती है, कोम्पर कई अंतरों को संकेत देगा क्योंकि हैश उसी क्रम में कैलकल्चर नहीं थे। यदि आप 30000 फ़ाइलों के साथ काम कर रहे हैं तो छोटी निर्देशिकाओं के लिए कोई बड़ी बात नहीं है। इसलिए, आपके पास दो निर्देशिकाओं के बीच हैश सूचियों की तुलना करना आसान बनाने के लिए आउटपुट को छाँटने के अतिरिक्त चरण हैं।
find ./path/to/directory/ -type f -print0 | xargs -0 sha1sum > sha1sum_list_unsorted.txt
sort sha1sum_list_unsorted.txt > sha1sum_list_sorted.txt
यह आउटपुट को सॉर्ट करेगा ताकि विभिन्न प्रोग्राम को चलाते समय एक ही हैश वाली फाइलें उसी तर्ज पर हों (बशर्ते कि कोई भी फाइल नई डायरेक्टरी को याद न कर रही हो)।
और SCRIPT पर ...
यहाँ एक स्क्रिप्ट है जो मैंने लिखी है। यह वही काम करता है जो खोज / xarg उत्तर करता है, लेकिन यह sha1sum (उन्हें उसी निर्देशिका में रखते हुए) प्राप्त करने से पहले फ़ाइलों को सॉर्ट करेगा। स्क्रिप्ट की पहली पंक्ति निर्देशिका की सभी फ़ाइलों को पुनरावर्ती रूप से ढूँढती है। अगले एक वर्णानुक्रम में परिणामों को क्रमबद्ध करता है। निम्न दो, सॉर्ट की गई सामग्री को लेता है और सॉर्ट की गई सूची में फ़ाइलों के लिए एक sha1sum और उद्धरण चिह्नों को जोड़ता है, जिससे एक बड़ी शेल स्क्रिप्ट बनती है जो प्रत्येक फ़ाइल को एक बार में गणना करती है, वह इसे content_sha1sc.txt पर आउटपुट करती है।
#!/bin/bash
find . -type f > content.txt
sort content.txt > content_sorted.txt
awk '{print "sha1sum \""$0}' content_sorted.txt > temp.txt
awk '{print $0"\""}' temp.txt > get_sha1.sh
chmod +x get_sha1.sh
./get_sha1.sh > content_sha1sum.txt
rm content.txt
rm content_sorted.txt
rm temp.txt
rm get_sha1.sh
xdg-open content_sha1sum.txt
उम्मीद है की यह मदद करेगा।