Tar

Gzip 命令產生與 tar -cvzf 完全相同的輸出?

  • November 27, 2012

我確實認為以下命令等效,但它們產生不同的校驗和:

tar -cvzf ...並且tar -cvf ...; gzip ...不會產生相同的輸出。

sha1sum不同。

與行為gzip完美匹配的命令是什麼?tar -cvzf

輸出文件的差異可能不是由於壓縮方法。預設情況下,GNU tar 使用標準的 GZIP放氣模式。造成差異的原因之一是 GZIP 壓縮文件的格式。

GZIP頭的前8個字節的結構如下

     OFFSET  SIZE  VALUE    COMMENT
       0       1    0x1F    First "magic" id
       1       1    0x8B    Second "magic" id
       2       1    CM      Compression method
       3       1    FLAGS   8-bit flag register
       4       4    MTIME   Object modification time

問題出在MTIME球場上。對於來自管道的數據,這是目前 Unix 時間的值(自 1970 年 1 月 1 日以來的秒數)。因此,以至少一秒的間隔創建的兩個原本相同的壓縮存檔將是不同的。

嘗試對tar -cvzf相同的數據執行兩次並比較結果。結果將在第 5 個字節(時間戳值的最低字節)有所不同。

$ tar czvf test1.tgz tmp/ ; sleep 2 ; \
 tar czvf test2.tgz tmp/ ; md5sum test1.tgz test2.tgz
tmp/
tmp/test
tmp/
tmp/test
23d46f62dd4a9a0851279df7fe15842e  test1.tgz
c8ae65026a5f771c63acf87a18f7379c  test2.tgz

引用自:https://serverfault.com/questions/452647