RFC 1952 によると、gzip
ファイル ヘッダーには 変更時刻 が含まれます 元のファイルの (フィールド MTIME
)。 gzip -lv renew.log.gz
でヘッダーをプレーンテキストで表示できます :
method crc date time compressed uncompressed ratio uncompressed_name
defla 64263ac7 Jun 21 17:59 314 597 52.1% renew.log
したがって、本当に gzip されたファイルを比較したい場合は、-n
で圧縮してください。 元のファイル名とタイム スタンプを保存しないオプション 、
gzip -n renew.log s3/renew.log
そしてそれらの md5sum は同一でなければなりません。
それ以外の場合は、使用できます
md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)
解凍されたファイルの md5sum を計算します。
ただし、表示される時刻と日付はヘッダーから取得されたものではなく、現在の値を表しています。これはファイル名にも当てはまります:
$ gzip renew.log
$ mv renew.log.gz foo.gz
$ gzip -lv foo.gz -------- uncompressed name is taken from current name ---v
method crc date time compressed uncompressed ratio uncompressed_name
defla 6c721644 Jul 11 22:34 580 1586 65.7% foo
$ hexdump -C foo.gz | head -n 2
00000000 1f 8b 08 08 f0 16 df 51 00 03 72 65 6e 65 77 2e |.......Q..renew.|
00000010 6c 6f 67 00 8d 93 dd 6e 9b 30 18 86 8f 89 94 7b |log....n.0.....{|
^^^-------^^^^^
original filename is stored in the header
同じファイルの圧縮バージョンが同じであると期待するのはなぜですか?圧縮プログラム (gzip) は、ヘッダーにタイムスタンプを含めたり、ランダム化されたアルゴリズムを使用したりできます。
そしてまさに! gzip ヘッダーにはタイムスタンプが含まれています。圧縮ファイルを同じにしたい場合は、ファイルのタイムスタンプが同じでなければなりません!
したがって、ファイルをコピーするときは、常に cp -p file1 file1
として実行してください 、 cp file1 file2
だけではありません - それは実際には悪い習慣です!
「-n」フラグを付けて gzip を使用するだけです:
[email protected]:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3
[email protected]:~$ sha1sum Yippie-Ki-Yay.mp3.gz bla/Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 bla/Yippie-Ki-Yay.mp3.gz
ソース:https://unix.stackexchange.com/questions/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum