एक निर्देशिका के MD5 चेकसम की गणना करें


29

मैं निर्देशिका सामग्री की तुलना करने का एक त्वरित तरीका ढूंढ रहा हूं। क्या संपूर्ण निर्देशिका का md5sum (या समतुल्य चेकसम) करना संभव है?

उबंटू लिनक्स का उपयोग करना


आप निर्देशिकाओं की तुलना करने के लिए भिन्न का उपयोग करना चाह सकते हैं जो वास्तव में आपको दिखाएगी कि निर्देशिकाएं कहां भिन्न हैं। unixtutorial.org/2008/06/how-to-compare-directories-in-unix
Kibbee

@ किबी को रोकने के लिए, आपको प्रत्येक फ़ाइल की डेटा सामग्री के अलावा कुछ और ध्यान में रखने की आवश्यकता है और ठीक उसी तरह जैसे आप फ़ाइलों की जांच करते हैं। यह देखते हुए: [चेकसम] 1. एक (निर्देशिका) - File1 [एबीसी] - File2 [CBA] 2. बी (निर्देशिका) - File1 [एबीसी] - बी 1 (निर्देशिका) - File2 [CBA] 3. सी (निर्देशिका) - File4 [एबीसी] - फाइल ५ [सीबीए] ४. डी (निर्देशिका) - फाइल १ कॉपी [एबीसी] - फाइल २ कॉपी [सीबीए] निर्देशिका और बी समान नहीं हैं, हालांकि इनमें एक ही फाइल होती है (हालांकि बी १ में , फाइल २ एक उपनिर्देशिका में है) । आपके उदाहरण के तहत, और सी को समान माना जाएगा क्योंकि
जैकब लाइल्स

जवाबों:


36

ज़रूर - md5sum directory/*

यदि आपको कुछ अधिक लचीला चाहिए (कहते हैं, डायरेक्टरी रिकर्सन या हैश तुलना के लिए), तो md5deep देखें।

apt-get install md5deep
md5deep -r directory

निर्देशिका संरचना की तुलना करने के लिए, आप इसकी तुलना करने के लिए हैश की सूची दे सकते हैं:

md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2

यह डायरेक्टरी 2 की उन सभी फाइलों को आउटपुट करेगा जो डाइरेक्टरी 1 से मेल नहीं खाती हैं।

यह उन फ़ाइलों को नहीं दिखाएगा जिन्हें Directory1 से हटा दिया गया है या जो फ़ाइलें Directory2 में जोड़ दी गई हैं।


ऐसा नहीं है कि मेरा क्या मतलब है, लेकिन मैं जो चाहता था :) उसका मतलब यह था कि पुनरावर्ती, और अंत में एक हैश प्राप्त करना है, लेकिन मुझे लगता है कि यह md5deep -l और हैशिंग उत्पादन के साथ ही किया जा सकता है।
pufferfish

1
हैशिंग का क्रम सुसंगत नहीं है, इसलिए हैशिंग से पहले आउटपुट को सॉर्ट करना होगा
pufferfish

1
नियतात्मक आदेश प्राप्त करने के लिए, -j0मल्टीथ्रेडिंग को अक्षम करें (मैन पेज देखें) का उपयोग करें।
जोहान

1
@ ShaneMadden e मैं इसके md5deepसाथ स्थापित हुआ sudo apt-get install md5deep, Ubuntu 16.04लेकिन जब मैंने मैन पेज को पढ़ने की कोशिश की तो यह मुझे बताता है कि> md5deep के लिए कोई मैनुअल प्रविष्टि नहीं
कसुन सियामबलपिटिया

27

यदि आप यह देखना चाहते हैं कि दो निर्देशिकाओं के बीच क्या अलग है (अगर कुछ भी), तो rsync एक अच्छा फिट होगा।

rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory

यह उन फ़ाइलों को सूचीबद्ध करेगा जो अलग हैं।


2
diff -qr /source/directory/ /destination/directory/अलग-अलग फ़ाइलों को भी दिखाएगा।
कोनरक

क्या चेकसम के बजाय एक बिटवाइज़ तुलना करने का एक तरीका है? यह स्थानीय ड्राइव पर तेज़ हो सकता है।
अली

बहुत अच्छा। काम करता है अगर स्रोत या गंतव्य भी दूरस्थ फ़ोल्डर हैं जैसेusername@hostname:/destination/directory
थालिस के।

11

मुझे लगता है कि मैंने इस उत्तर के साथ पहले इसका जवाब दिया:

find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum

देता है: b1a5b654afee985d5daccd42d41e19b2877d66b1

विचार है कि आप हैश सभी फ़ाइलों को एक पंक्ति में हैश को काटते हैं, उन्हें क्रमबद्ध करते हैं और एक हैश का उपयोग करते हुए हैश करते हैं। यह फ़ाइलों के नाम पर निर्भर नहीं करता है।


5

CFV आवेदन, काफी उपयोगी यह केवल नहीं की जाँच करें और MD5 चेकसम बना सकते हैं, यह भी CRC32, SHA1, धार, बराबर, par2 कर सकते हैं।

वर्तमान निर्देशिका में सभी फ़ाइलों के लिए CRC32 चेकसम फ़ाइल बनाने के लिए:

सीएफवी -सी

वर्तमान निर्देशिका में सभी फ़ाइलों के लिए MD5 चेकसम फ़ाइल बनाने के लिए:

cfv -C -t md5 -f "करंट डायरेक्टरी.md5sums"

प्रत्येक उप निर्देशिका के लिए एक अलग चेकसम फ़ाइल बनाने के लिए:

cfv -C -r

सभी उप निर्देशिकाओं में फाइलें युक्त "सुपर" चेकसम फाइल बनाने के लिए:

cfv -C -rr

4

मैंने हैशदीप का इस्तेमाल किया, जैसा कि इस अस्क्यूबंटु उत्तर में बताया गया है: कॉपी की गई फाइलों की शुद्धता की जांच करें :

चेकसमों की गणना करने के लिए:

 $ cd <directory1>
 $ hashdeep -rlc md5 . > ~/hashOutput.txt

अंतरों को सत्यापित और सूचीबद्ध करने के लिए:

 $ cd <directory2>
 $ hashdeep -ravvl -k ~/hashOutput.txt .
 hashdeep: Audit passed
    Input files examined: 0
   Known files expecting: 0
           Files matched: 13770
 Files partially matched: 0
             Files moved: 0
         New files found: 0
   Known files not found: 0

इसमें md5deep पर एक फायदा है कि यह नामांकित (स्थानांतरित), जोड़ा, और हटाए गए फ़ाइलों को दिखाएगा, साथ ही साथ http://www.meridiandiscovery.com/how- के नीचे बताई गई 0 लंबाई फ़ाइलों के साथ समस्या से बचना होगा । / मान्य-कॉपी-परिणाम-उपयोग-md5deep के लिए


3

इसने मेरे लिए काम किया: (इसे उस समय तक चलाएं जब आप उस निर्देशिका में रुचि रखते हैं)

md5deep -rl . | awk '{print $1}' | sort -n | md5sum

1

आप प्रत्येक एकल फ़ाइलों के एमडी 5 रकम बना सकते हैं, इन चेकसमों को वर्णानुक्रम में क्रमबद्ध कर सकते हैं और उन्हें (साथ या बिना सुर्खियों के)। चूंकि एमडी 5 क्रिप्टोग्राफिक है, इसलिए इसे हैश की परत के साथ ठीक काम करना चाहिए।

चीजों के लिए एक निश्चित क्रम होना चाहिए, अन्यथा आपको बराबर अवधि के लिए अलग-अलग परिणाम मिलेंगे।

और तुम पर विचार करना चाहिए कि एक निर्देशिका करने के लिए कुछ फ़ाइल जोड़ने पूरी तरह से परिणाम बदल जाएगा, भले ही यह सिर्फ एक था .directoryकी .DS_Storeफ़ाइल।


तकनीकी रूप से किसी को अलग-अलग निर्देशिकाओं के लिए एक ही हैश मिल सकता है। यदि dir A के पास 2 फाइलें थीं जिनमें 'ab' और 'c' और dir B में 2 फाइलें थीं, जिनमें सामग्री 'a' और 'bc' थी, तो केवल फाइलों में मौजूद हैशिंग डेटा को एक ही परिणाम देगा, भले ही उनके पास फाइलें हों विभिन्न सामग्री। मुझे भी यकीन नहीं है कि कोई डायरेक्टरी के MD5Sum को कैसे परिभाषित करेगा।
किबी

1

एक विशिष्ट मामले के रूप में, आपको निर्देशिका 1 से निर्देशिका 2 तक कुछ फ़ाइलों को कॉपी करने की अनुमति देता है और फिर आप md5 तुलना का उपयोग करके एक सफल प्रतिलिपि सत्यापित करना चाहते हैं।

प्रथम। सीडी 1 से डायरेक्टरी 1 और टाइप:

find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt

जो डायरेक्टरी 1 में प्रत्येक फाइल के लिए md5 योग वाली एक संदर्भ फ़ाइल बनाएगा। एक बार यह पूरा हो जाने के बाद, आपको निर्देशिका 2 और प्रकार:

md5sum -c ~/Desktop/md5sum.txt

प्रोग्राम md5sum md5sum.txt फ़ाइल से प्रत्येक पथ को प्राप्त करता है, गंतव्य फ़ोल्डर में उस फ़ाइल के md5sum की गणना करता है और फिर उस योग की तुलना करता है जिसे उसने फ़ाइल में संग्रहीत किया है।

प्रक्रिया पूरी होने के बाद, आपको एक सारांश मिलेगा जैसे 'तो और इतनी सारी फाइलें मेल नहीं खाती थीं' या ऐसा ही कुछ।



1

मुझे बैकअप / दर्पण की अखंडता की पुष्टि करने की आवश्यकता है, जिसमें बड़ी संख्या में फाइलें हैं और क्रैश-कमांड नामक एक कमांड-लाइन प्रोग्राम लिखना समाप्त कर दिया है। यह पायथन में लिखा गया है। एक जीटीके + लॉन्चर भी उपलब्ध है। इसे आज़माने की आपकी इच्छा हो सकती है...

http://code.google.com/p/masshash/

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