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命令。