1. 程式人生 > >gzip的一個小坑

gzip的一個小坑

使用gzip壓縮遊戲資源的時候踩了一個小坑。

gzip命令預設會將被壓縮檔案的名稱寫入到zip包中,所以檔案img.png和其副本img_copy.png壓縮後的md5值就不相同了。

簡單的測試指令碼如下:

#! /bin/bash
echo "the md5 of original png :"
md5 /temp/test/img.png
md5 /temp/test/img_copy.png

gzip -2 -5  -c /temp/test/img.png > /temp/test/img.zip
gzip -2 -5  -c /temp/test/img_copy.png > /temp/test/img_copy.zip

echo
"the md5 of zip :" md5 /temp/test/img.zip md5 /temp/test/img_copy.zip

執行結果如下:

the md5 of original png :
MD5 (/temp/test/img.png) = b00a1862e781da625df40658d54f48bb
MD5 (/temp/test/img_copy.png) = b00a1862e781da625df40658d54f48bb
the md5 of zip :
MD5 (/temp/test/img.zip) = d17c8b512e0eb2c0df46d1cf294d11ba
MD5 (/temp/test/img_copy.zip) = a1bc3d6f0d2c0cb174ca99190d8b6744

壓縮前兩個png的md5值是相同的,壓縮後的兩個zip的md5值確實不同了。

使用gzip –help檢視命令引數:

usage: gzip [-123456789acdfhklLNnqrtVv] [-S .suffix] [ [ …]]
-1 –fast fastest (worst) compression
-2 .. -8 set compression level
-9 –best best (slowest) compression
-c –stdout write to stdout, keep original files
–to-stdout
-d –decompress uncompress files
–uncompress
-f –force force overwriting & compress links
-h –help display this help
-k –keep don’t delete input files during operation
-l –list list compressed file contents
-N –name save or restore original file name and time stamp
-n –no-name don’t save original file name or time stamp
-q –quiet output no warnings
-r –recursive recursively compress files in directories
-S .suf use suffix .suf instead of .gz
–suffix .suf
-t –test test compressed file
-V –version display program version
-v –verbose print extra statistics

關鍵的一句是: -n –no-name don’t save original file name or time stamp
gzip 命令中設定-n引數,壓縮時不儲存檔名稱。
更改後的壓縮命令如下:

gzip -2 -5  -c -n /temp/test/img.png > /temp/test/img.zip

PS:測試環境為Mac,自帶gzip、md5命令。