@derobert का उत्तर बहुत अच्छा है, हालांकि मैं कुछ अन्य जानकारी साझा करना चाहता हूं जो मुझे मिली हैं।
gzip -l -v
gzip- संपीड़ित फ़ाइलों में पहले से ही एक हैश (सुरक्षित नहीं है, हालांकि इस SO पोस्ट को देखें ):
$ echo something > foo
$ gzip foo
$ gzip -v -l foo.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 18b1f736 Feb 8 22:34 34 10 -20.0% foo
एक सीआरसी को मिला सकते हैं और एक त्वरित फिंगरप्रिंट प्राप्त करने के लिए असम्पीडित आकार को जोड़ सकते हैं:
gzip -v -l foo.gz | awk '{print $2, $7}'
सीएमपी
यह देखने के लिए कि दो बाइट्स समान हैं या नहीं, उपयोग करें cmp file1 file2
। अब, एक gzipped फ़ाइल में डेटा और पाद लेख (CRC प्लस मूल आकार) के साथ कुछ हेडर संलग्न हैं। गज़िप प्रारूप का वर्णन बताता है कि हेडर में वह समय होता है जब फ़ाइल को संपीड़ित किया जाता था और यह कि फ़ाइल का नाम एक शून्य-टर्म स्ट्रिंग है जिसे 10-बाइट हेडर के बाद जोड़ा जाता है।
इसलिए, यह मानते हुए कि फ़ाइल नाम स्थिर है और एक ही कमांड ( gzip "$name"
) का उपयोग किया जाता है, कोई यह जांच सकता है कि क्या cmp
समय सहित पहले बाइट्स का उपयोग करके और छोड़ कर दो फाइलें अलग हैं :
cmp -i 8 file1 file2
नोट : यह धारणा कि समान संपीड़न विकल्प महत्वपूर्ण हैं, अन्यथा कमांड हमेशा फ़ाइल को अलग-अलग रिपोर्ट करेगा। ऐसा इसलिए होता है क्योंकि संपीड़न विकल्प हेडर में संग्रहीत होते हैं और संपीड़ित डेटा को प्रभावित कर सकते हैं। cmp
बस कच्चे बाइट्स को देखता है और इसे गज़िप के रूप में व्याख्या नहीं करता है।
यदि आपके पास एक ही लंबाई के फ़ाइल नाम हैं, तो आप फ़ाइल नाम को पढ़ने के बाद बाइट्स की गणना करने की कोशिश कर सकते हैं। जब फ़ाइलनाम अलग-अलग आकार के होते हैं, तो आप cmp
बाइट को स्किप करने के बाद चला सकते हैं , जैसे cmp <(cut -b9- file1) <(cut -b10- file2)
।
zcmp
यह निश्चित रूप से जाने का सबसे अच्छा तरीका है, यह पहले डेटा को संपीड़ित करता है और बाइट्स के साथ तुलना करना शुरू करता है cmp
(वास्तव में, यह वही है जो zcmp
( zdiff
) शेलस्क्रिप्ट में किया गया है )।
एक नोट, मैनुअल पेज में निम्नलिखित नोट से डरो मत:
जब दोनों फ़ाइलों की तुलना करने से पहले असम्पीडित होना चाहिए, दूसरा / tmp के लिए असम्पीडित है। अन्य सभी मामलों में, zdiff और zcmp केवल एक पाइप का उपयोग करते हैं।
जब आपके पास पर्याप्त नया बैश होता है, तो संपीड़न एक अस्थायी फ़ाइल का उपयोग नहीं करेगा, बस एक पाइप। या, जैसा कि zdiff
स्रोत कहता है:
# Reject Solaris 8's buggy /bin/bash 2.03.