通常、gzip も tar も「絶対最小の tar.gz」を作成することはできません。gz形式に圧縮できる圧縮ユーティリティはたくさんあります。私は、最小のファイルを得るために gzip
, 7z
, advdef
, advdef
を試すための bash スクリプト gz99 を書きました。これを使って最小のファイルを作成するために実行します。
tar c path/to/data | gz99 file.gz
AdvanceCOMP の gz99
ユーティリティは、通常、最小のファイルを取得しますが、バグがあります(advdef
ユーティリティは、advdef
の出力を受け入れる前に、ファイルが破損していないかどうかをチェックします)。0x6& を直接使うには、好きなように file.tar.gz を作成してください。それから実行してください。
advdef -z -4 file.tar.gz
これで標準の gz ファイルが作成され、通常通り gzip や tar で読み込めるようになります。これが gz 形式でできる最善の方法です。
あなたは最近 tar が圧縮できることを知ったばかりで、なぜ最小の “.tar.gz” ファイルが欲しいのかを言わなかったので、tar ファイルには xz のようなより効率的なフォーマットがあることに気づいていないかもしれません。一般的に、異なるフォーマットに切り替えることで、gzip オプションをいじくりまわすよりも圧縮率が大幅に向上します。xz の主な欠点は、gzip のように一般的ではないので、ファイルを送る相手が新しいパッケージをインストールしなければならないかもしれないことです。また、特に圧縮時には少し遅くなる傾向があります。もしこれが問題ではなく、本当に最小の tar ファイルが欲しいのであれば、試してみてください。
tar cv path/to/data | xz -9 > file.tar.xz
tar xvf file.tar.xz
最近のバージョンのtarは、例えばUbuntu 13.10では、圧縮ファイルを自動的に検出します。
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
これらの圧縮ユーティリティの比較を簡単に説明するために、linuxカーネルのpatch-3.1.1を圧縮した場合の効果を考えてみましょう。
0x1&
この些細な例では、最小の gz を得るために advdef が必要であることがわかります (ただし、7z -tgzip はほぼ同等でバグも少ないです)。また、xz に切り替えた方が、圧縮に時間をかけずに古い gz 形式を最大限に活用するよりも、はるかに多くのスペースを確保できることがわかります。