標準出力をgzipしてファイルを保存している場合など、元のファイルのサイズがわからないときに、伸長して圧縮率を確認したいときがある。
gzip -l
, gzip --list
を使うと説明されることが多いが、gzip -l
には以下のバグがあるため利用しないほうがいい。
gzip 形式では、入力サイズは 2^32 の余りで表現されるため、 --list オプション による表示では、圧縮前のファイルが 4GB 以上の場合、圧縮前のサイズや圧縮率が 正しく表示されない。
引用元: https://linuxjm.osdn.jp/html/GNU_gzip/man1/gzip.1.html
実際に伸長するとDISK容量が足りなくなるおそれがあるので、標準出力に伸長して、wc -c
に流すことでバイト数を取得する。
標準出力に伸長する方法は以下の通り3つほどある。下に行くほどおすすめ。gzipではcompressで圧縮されたものを扱えないが、gunzipとzcatであれば扱える。zcatはコマンドオプションもいらないため一番書きやすい。
gzip -dc file.gz | wc -c
gunzip -c file.gz | wc -c
zcat file.gz | wc -c