निर्देशिका में सभी फ़ाइलों के लिए md5 चेकसम उत्पन्न करें


75

मैं एक निर्देशिका में सभी फ़ाइलों के लिए एक md5 चेकसम सूची बनाना चाहूंगा।

मैं करना चाहता हूं cat filename | md5sum > ouptput.txt। मैं अपनी निर्देशिका में सभी फ़ाइलों के लिए 1 चरण में ऐसा करना चाहता हूं।

किसी भी सहायता महान होगा।


मैं एक विशिष्ट बैकअप फ़ाइल का md5sum (चेकसम) कैसे ढूँढ सकता हूँ?

जवाबों:


110

आप md5sumकई फ़ाइल नाम या बैश विस्तार पास कर सकते हैं :

$ md5sum * > checklist.chk  # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk   # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK

यदि आप फैंसी प्राप्त करना चाहते हैं, तो आप findफ़ाइलों को ड्रिल करने और फ़िल्टर करने के साथ-साथ पुनरावर्ती रूप से काम करने जैसी चीजों का उपयोग कर सकते हैं :

find -type f -exec md5sum "{}" + > checklist.chk

1
md5sum, उप निर्देशिकाओं के अंदर फ़ाइलों को प्राप्त करने के लिए उपरोक्त का उपयोग कैसे करें, उपर्युक्त md5sum *उपनिर्देशिका स्तर में यह कहकर जा रहा है ... एक निर्देशिका है
कसुन सियामबलपिटिया

चलने से पूछने के लिए क्षमा करें find -type f -exec md5sum '{}' +और '-type f -exec md5sum' {} '' मैं प्राप्त करने में सक्षम था। धन्यवाद :)
कसुन सियामबलपिटि

मैं इस आउटपुट के रूप को अधिक पसंद करता हूं:openssl md5 * > checklist.txt
ashley

1
यदि आप एक ऐसे शेल का उपयोग कर रहे हैं जो **पुनरावर्ती (जैसे zsh) का मूल्यांकन करने में प्रसन्न है , तो यह और भी सरल है:md5sum **/* 2>/dev/null
Joost

12

एक महान चेकसम निर्माण / सत्यापन कार्यक्रम rhash है। यह एसएफवी संगत फाइलें भी बनाता है, और उन्हें भी जांचता है।

यह md4, md5, sha1, sha512, crc32 और कई अन्य का समर्थन करता है।

इसके अलावा यह md5deep या sha1deep जैसे पुनरावर्ती निर्माण (-r विकल्प) कर सकता है।

अंतिम लेकिन कम से कम आप चेकसम फ़ाइल के आउटपुट को प्रारूपित नहीं कर सकते हैं; उदाहरण के लिए:

rhash --md5 -p '%h,%p\n' -r /home/

एक CSV फ़ाइल को /homeनिर्देशिका के साथ पुन: प्रारंभ करने वाली फ़ाइलों के पूर्ण पथ सहित आउटपुट करता है ।

मैं अत्यंत उपयोगी भी -e विकल्प नाम में crc32 योग सम्मिलित करके फ़ाइलों का नाम बदलें।

आप "rdsh" के साथ "md5sum" को फीनिक्सएनएल72 उदाहरणों में बदल सकते हैं।


1
यहाँ क्या वास्तव में '/ घर /' करता है? यह उपकरण बहुत अच्छा लग रहा है।
एंडी इबेंज

मुझे लगता है कि यह एक त्रुटि है, यह निश्चित रूप से मेरे लिए त्रुटियां हैं। -P आउटपुट के लिए प्रारूप है। मैं इसे सही कर दूंगा।
pbhj

7

यहाँ दो और व्यापक उदाहरण हैं:

  1. प्रत्येक निर्देशिका में एक md5 फ़ाइल बनाएं जिसमें पहले से ही एक नहीं है, पूर्ण पथ के साथ:

    find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] &&  md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done 
    
  2. प्रत्येक फ़ोल्डर में एक md5 फ़ाइल बनाएं जिसमें पहले से ही एक नहीं है: कोई पथ नहीं, केवल फ़ाइल नाम:

    find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] &&  md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done 
    

1 और 2 के बीच क्या अंतर है, जिस तरह से परिणामी md5 फ़ाइल में फाइल प्रस्तुत की जाती है।

कमांड निम्नलिखित करते हैं:

  1. वर्तमान फ़ोल्डर के लिए निर्देशिका नामों की एक सूची बनाएँ। (ट्री)
  2. फ़ोल्डर सूची को सॉर्ट करें।
  3. प्रत्येक निर्देशिका की जाँच करें यदि फ़ाइल @ md5sum.md5 मौजूद है। अगर यह मौजूद है तो आउटपुट स्किप हो गया, यदि यह मौजूद नहीं है तो आउटपुट प्रोसेसिंग।
  4. यदि @ md5Sum.md5 फ़ाइल मौजूद नहीं है, तो md5Sum फ़ोल्डर में सभी फ़ाइलों के चेकसम के साथ एक उत्पन्न करेगा। 5) केवल पढ़ने के लिए उत्पन्न @ md5Sum.md5 फ़ाइल सेट करें।

इस संपूर्ण स्क्रिप्ट के आउटपुट को एक फ़ाइल (.....; किया गया> परीक्षण.लॉग) या किसी अन्य प्रोग्राम (जैसे grep) पर पाइप किया जा सकता है। आउटपुट आपको केवल यह बताएगा कि कौन सी निर्देशिकाएं कहां छोड़ दी गई हैं और किस पर कार्रवाई की गई है।

एक सफल रन के बाद, आप अपने वर्तमान निर्देशिका के प्रत्येक उपनिर्देशिका में एक @ md5Sum.md5 फ़ाइल के साथ समाप्त हो जाएंगे

मैंने फ़ाइल का नाम @ md5Sum.md5 रखा ताकि यह सांबा शेयर में निर्देशिका के शीर्ष पर सूचीबद्ध हो जाए।

सभी @ md5Sum.md5 फ़ाइलों का सत्यापन अगले आदेशों द्वारा किया जा सकता है:

find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt

बाद में आप grep -v ओके का उपयोग करके checklog.txt को अलग कर सकते हैं जो कि सभी फाइलों की एक सूची प्राप्त करते हैं।

किसी विशिष्ट निर्देशिका में @ md5Sum.md5 को पुनर्जीवित करने के लिए, जब आपने उदाहरण के लिए फ़ाइलों को बदला या जोड़ा है, या तो @ md5Sum.md5 फ़ाइल को हटा दें या इसे नाम बदलें और फिर से जेनरेट कमांड चलाएं।


कमांड # 1 पूर्ण पथों का उपयोग करते हुए: md5sum "$ {dir}" / * डॉट के साथ शुरू होने वाली छिपी हुई फ़ाइलों को नहीं उठा रहा है। कोई उपाय?
user14654

पार्टी के लिए देर से, लेकिन चूंकि md5sum फ़ाइल नाम चाहता है (यदि आप इसे एक निर्देशिका देते हैं तो दुखी लगते हैं) मदद के लिए पूछना आसान हो सकता है: $ md5sum $ ("$ dir" -maxdepit 0 -type f) खोजें - "- प्रकार f "नियमित और .hidden फ़ाइलों को खींचता है (यह भी, कई विकल्प हैं, लेकिन सुपर सहायक हो सकते हैं)। यदि आप सब कुछ पुनरावर्ती चाहते हैं तो "-Maxdepth 0" भाग को छोड़ दें। नोट: यह नाजुक है अगर फ़ाइल नाम में रिक्त स्थान हैं, तो आप xargs और -0 ( en.wikipedia.org/wiki/Xargs ) पर पढ़ सकते हैं
jgreve

0

मैंने इस मुद्दे को मारा, और जब ऊपर के समाधान सुरुचिपूर्ण हैं, तो मैं इस स्थिति के लिए एक त्वरित और गंदी हैक चाहता था: 1 निर्देशिका, उपनिर्देशिका के साथ एक स्तर गहरा इसके अंदर।

इसलिए, निर्देशिका को शेल में दर्ज करें और चलाएं:

md5sum * */* 2>/dev/null > md5sum.md5

यह शीर्ष स्तर निर्देशिका में सभी फाइलें प्राप्त करता है, उप निर्देशिकाओं के बारे में त्रुटि चेतावनी को हटाता है, और फिर उपनिर्देशिका सामग्री पर md5sums चलाता है। लाभ: याद रखने में आसान, यह वही करता है जो इसे करना चाहिए। मैं हमेशा वाक्यविन्यास को खोजने में भ्रमित हो जाता हूं और इसे अपने सिर के ऊपर से कभी भी याद नहीं कर सकता हूं, इसलिए लूप आदि की कोई आवश्यकता नहीं है, निर्देशिका नामों में रिक्त स्थान से निपटते हुए, इस एक लाइनर ने ठीक काम किया। नहीं एक मजबूत शक्तिशाली समाधान,> उप स्तर के> 1 स्तर के लिए अच्छा नहीं है, लेकिन समस्या के लिए एक त्वरित और आसान समाधान।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.