วิธีรับไฟล์บีบอัดที่เหมือนกัน 100% สำหรับไฟล์ต้นฉบับที่แตกต่างกันเฉพาะวันที่สร้าง


8

ฉันต้องการที่จะสามารถที่จะบีบอัดไฟล์ losslessly และถ้าไฟล์ต้นฉบับเป็นเหมือนไฟล์ของผู้ใช้อื่นที่ฉันต้องการทั้งสองของการบีบอัดไฟล์ของเราจะมีการแข่งขันแม้ว่าวันที่ไฟล์ต้นฉบับจะแตกต่างกัน

ฉันต้องการใช้ RAM สูงสุด 1GB ขณะกำลังบีบอัด ฉันพิงอัลกอริทึมแบบไม่สมมาตรเพราะไฟล์ที่ฉันมีค่อนข้างใหญ่และใช้เวลาอย่างน้อยหนึ่งชั่วโมงในการบีบอัดด้วย LZMA1 "ultra" ใน 7-zip บนเครื่อง P4 ที่มี RAM 1GB และไม่มีอะไรทำงานอีก ฉันคิดว่าสามารถใช้ 7-zip และ FreeARC เพื่อจุดประสงค์ของฉัน ฉันพยายามค้นหาคำสั่งที่ฉันควรใช้ แต่ฉันไม่มีโชคมาก

แก้ไข : ควรสร้างไฟล์ที่เหมือนกัน 100% แม้ว่าวันที่สร้างจะแตกต่างกัน สิ่งนี้ควรเป็นไปได้ผ่าน - อัพเดทใน Freearc และด้วย ???? ใน 7-zip ฉันกำลังมองหาคำสั่งที่เทียบเท่าสำหรับ 7-zip และวิธีการบีบอัดข้อมูลมาตรฐานในคอมพิวเตอร์หลายเครื่อง


1
คุณแน่ใจว่า LZMA นั้นถูกกำหนดอย่างไร
Ignacio Vazquez-Abrams

2
ขยายบนไม่ได้มีโชคดีมากส่วนหนึ่ง
fideli

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

ตอนนี้คุณสามารถใช้ MD5 ที่เริ่มต้นหลังจากไบต์ที่ 8 ศูนย์สี่ไบต์เหล่านี้ในไฟล์ของคุณและสูญเสียการประทับเวลาของพวกเขาหรือแยก CRC16 จาก gzips เหล่านั้น (ดู RFC สำหรับข้อมูลเกี่ยวกับวิธีการแยก)

หรือคุณสามารถบันทึกโดยไม่มีการประทับเวลา:

$ 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
และหากไม่มีพอร์ตอื่นของgzipWindows ให้ใช้งาน Cygwin ก็ให้บริการ
Arjan

3

ไม่ใช่คำตอบสำหรับคำถามของคุณโดยตรง แต่อาจช่วยได้

นานมาแล้ว (สหัสวรรษที่แตกต่างกัน) ฉันมีปัญหาเดียวกัน เราต้องการทราบว่าไฟล์ที่บีบอัดอยู่ตรงไหนโดยไม่ต้องแตกไฟล์และทำการเปรียบเทียบ

วิธีการแก้ปัญหาของเราคือการได้รับmd5sumของไฟล์ก่อนที่จะอัดมันแล้วเราบีบอัดไฟล์และเปลี่ยนชื่อมันmd5sum.zip (.zip หรือ .tar.gz หรือ .rar หรือ .whatever) ด้วยวิธีนี้เรารู้ว่าหากไฟล์สองไฟล์มีชื่อเหมือนกัน (ไม่มีคำต่อท้าย) ไฟล์เหล่านั้นจะเหมือนกัน


2
ดี แต่แน่นอนเรารู้ว่าควรอ่านเราสันนิษฐาน ;-)
Arjan

เป็นสิ่งที่ดีมากเนื่องจากเป็นอิสระจากอัตราการบีบอัด: ไฟล์บีบอัดที่สร้างโดยโปรแกรมต่าง ๆ หรือการใช้การตั้งค่าที่แตกต่างกัน
Arjan

1
บทความนี้พยายามแก้ปัญหาเดียวกันค่อนข้างมาก ... medium.com/@mpreziuso/…
XCore

2

pristine-tarมี gzip เวอร์ชันแฮ็กซึ่งมักให้ผลลัพธ์เดียวกัน (และอีกอันสำหรับ bzip2) เลือกชุดอัลกอริทึมและการประทับเวลาและคุณพร้อมแล้ว


1

แฮ็คเข้าไปในแหล่งที่มาของ 7-zip ที่ซึ่งจะอ่านวันที่ของไฟล์เพียงแค่ใส่รหัสเพื่อเปลี่ยนวันที่เป็น 01.01.1997 หรือสิ่งอื่นใด - แก้ไขสำหรับไฟล์ทั้งหมด คอมไพล์ด้วยชื่ออื่นและใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.