स्रोत फ़ाइलों के लिए 100% समान संपीड़ित फ़ाइलें कैसे प्राप्त करें, जो केवल सृजन तिथि में भिन्न हैं?


8

मैं दोषरहित फ़ाइल को संपीड़ित करने में सक्षम होना चाहता हूं, और यदि मूल फ़ाइल किसी अन्य उपयोगकर्ता की फ़ाइल के समान है, तो मैं चाहता हूं कि हमारी दोनों संपीड़ित फाइलें मेल खाएं, भले ही मूल फ़ाइल तिथियां अलग हों

मैं सेक करते समय अधिकतम 1GB RAM का उपयोग करना चाहता हूं। मैं एक असममित एल्गोरिथ्म की ओर झुक रहा हूं क्योंकि मेरे पास जो फाइलें हैं वे काफी बड़ी हैं, और वे पी 4 मशीन पर 1 जीबी रैम के साथ 7-ज़िप में LZMA1 "अल्ट्रा" के साथ कम से कम एक घंटे का समय लेते हैं और कुछ नहीं चल रहा है। मुझे लगता है कि 7-ज़िप और FreeARC का उपयोग मेरे उद्देश्यों के लिए किया जा सकता है। मैंने उन कमांडों को खोजने की कोशिश की है, जिनका मुझे उपयोग करना चाहिए, लेकिन मुझे बहुत किस्मत नहीं मिल रही है।

संपादित करें : 100% समान फ़ाइलों का उत्पादन किया जाना चाहिए, भले ही सृजन की तिथियां अलग हों। यह Freearc में - के माध्यम से संभव है, और ???? 7-ज़िप में। मैं 7-ज़िप के लिए एक समतुल्य कमांड की तलाश कर रहा हूं, और कई कंप्यूटरों में संपीड़न को मानकीकृत करने का एक तरीका है।


1
आप कितना निश्चित हैं कि LZMA निर्धारक है?
इग्नासियो वाज़क्वेज़-अब्राम्स

2
भाग्य भाग नहीं होने पर विस्तार करें ।
फिदेली

2
सवाल कहां है? किसी भी संपीड़न कार्यक्रम दोषरहित होना चाहिए जब तक कि यह विशेष रूप से हानिपूर्ण न हो।
अगली सूचना तक रोक दिया गया।

जवाबों:


11

समान फ़ाइलों की एक जोड़ी बनाएँ:

$ echo hello > file1.test
$ echo hello > file2.test

उन्हें gzip ...

$ gzip file1.test
$ gzip file2.test

एकमात्र अंतर के रूप में टाइमस्टैम्प क्षेत्र का निरीक्षण करें:

$ hexdump file1.test.gz

0000000 8b1f 0808 TIME STMP 0300 6966 656c 2e31
0000010 6574 7473 cb00 cd48 c9c9 02e7 2000 3a30
0000020 0636 0000 0000                         

टाइमस्टैम्प पर अधिक जानकारी के लिए, RFC देखें

अब, आप या तो एक एमडी 5 ले सकते हैं जो बाइट 8 के बाद शुरू होता है, इन चार बाइट्स को अपनी फाइलों में शून्य करें और अपनी टाइमस्टैम्प खो दें, या उन गज़िप्स से सीआरसी 16 को निकालें (यह कैसे निकालें इसके बारे में जानकारी के लिए आरएफसी देखें)

या, आप टाइमस्टैम्प के बिना बचा सकते हैं:

$ echo test > file1.test
$ echo test > file2.test
$ gzip -n file1.test
$ gzip -n file2.test
$ md5sum file1.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file1.test.gz
$ md5sum file2.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file2.test.gz

1
और, अगर gzipविंडोज के लिए कोई अन्य पोर्ट उपलब्ध नहीं है, तो सिगविन इसे प्रदान करता है।
अर्जन

3

आपके प्रश्न का सीधा उत्तर नहीं है, लेकिन फिर भी इससे मदद मिल सकती है।

बहुत समय पहले (एक अलग सहस्राब्दी) मुझे भी यही समस्या थी। हम जानना चाहते थे कि क्या संपीड़ित फाइलें जहां उन्हें डिकम्प्रेस किए बिना और उनकी तुलना किए बिना समान हैं।

हमारा समाधान फ़ाइल को संपीड़ित करने से पहले फ़ाइल का md5sum प्राप्त करना था , फिर हमने फ़ाइल को संकुचित कर दिया और इसे md5sum.zip (.zip या .tar.gz या .rar या .whatever) का नाम दिया । इस तरह हम जानते थे कि यदि दो फ़ाइलों का नाम एक ही (बिना प्रत्यय के) होता है तो वे कहाँ मिलती हैं।


2
अच्छा, हालांकि निश्चित रूप से हम जानते थे कि पढ़ना चाहिए हम मान लिया है ;-)
अर्जन

यह भी अच्छा है क्योंकि यह संपीड़न दर से पूरी तरह से स्वतंत्र है: विभिन्न कार्यक्रमों द्वारा बनाई गई संपीड़ित फ़ाइलें या विभिन्न सेटिंग्स का उपयोग करके अभी भी समान होने के रूप में पहचाना जा सकता है।
अर्जन

1
यह लेख काफी कोशिश करता एक ही मुद्दे को हल करने के लिए ... medium.com/@mpreziuso/...
Xcore

2

प्रीस्टाइन-टार में gzip का हैक किया गया संस्करण है जो हमेशा एक ही परिणाम (और bzip2 के लिए दूसरा) का उत्पादन करता है। एक एल्गोरिथ्म संस्करण और एक टाइमस्टैम्प चुनें और आप जाने के लिए अच्छे हैं।


1

7-ज़िप के स्रोतों में हैक करें। जहाँ यह फ़ाइल की तारीख को पढ़ता है, बस दिनांक को 01.01.1997 को बदलने के लिए कोड डालें, या अन्य सभी फ़ाइलों के लिए निर्धारित - कुछ भी। विभिन्न नाम के साथ संकलित करें और इसका उपयोग करें।

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