題 為什麼壓縮文件之間的二進制差異與完全相同的起始文件完全相同?


我使用“diff”命令來比較在完全相同的起始文件上使用zip生成的兩個壓縮文件,並報告它們是不同的。但是,當我解壓縮它們並使用“diff”命令時,不會顯示任何差異。拉鍊和gzip我都注意到了這一點。


4
2017-12-18 19:48


起源




答案:


如果您想要比較壓縮內容,您可能還想使用zdiff。


2
2017-12-18 21:43





其中一個領域 gzip標頭 兩個文件之間有所不同。一個這樣的字段是壓縮文件的最後修改時間(自1970年以來的秒數),或者如果未從文件讀取壓縮數據,則表示壓縮文件的時間。

即使一秒鐘的差異也足以使gzip文件不匹配。


13
2017-12-18 20:47



@ChristopherBottoms本文研究了同樣的現象: medium.com/@mpreziuso/... - XCore


兩個可能的原因:

  • 相同壓縮程序使用的不同壓縮算法,或
  • 不同的壓縮程序

2
2017-12-18 19:56



我沒想添加PKZip文件規範,例如,包括為評論保留的數據區域。可能是gzip(etc)可能會在註釋位置放置數據,其中包含日期和時間等值,這會導致您看到的二進制差異。它們不會影響壓縮的數據,只會影響最終的壓縮存檔。 - JMD
謝謝。我沒想到它們是由具有相同命令行選項的相同程序生成的。壓縮這兩個文件時,我沒有更改任何參數。我可以+1。 - Christopher Bottoms


您可以使用gzip選項 --no-name (要么 -n)停止gzip將原始文件名和時間戳添加到gzip頭。假設使用相同的壓縮級別,這應該防止數據相同時的不匹配。將此選項添加到gzip命令的一種方法是設置 GZIP 環境變量,因此每個gzip命令都會使用該選項。例如,在Bourne兼容的shell中,例如bash,

export GZIP="--no-name -6"

要么

export GZIP=--no-name

2
2017-09-27 12:50