通常、gzipもtarも「絶対最小のtar.gz」を作成できません。gz形式に圧縮できる多くの圧縮ユーティリティがあります。私はbashスクリプト「書かれているgz99をしようとする」gzip
、7z
およびadvdef
最小のファイルを取得します。これを使用して最小のファイルを作成するには、次を実行します。
tar c path/to/data | gz99 file.gz
advdef
AdvanceCOMP のユーティリティは、通常、最小のファイルを提供しますが、バグがあります(gz99
ユーティリティは、の出力を受け入れる前にファイルが破損していないことを確認しますadvdef
)。advdef
直接使用するには、file.tar.gzを好きなように作成します。次に実行します:
advdef -z -4 file.tar.gz
これにより、gzipとtarで通常どおり読み取ることができる標準のgzファイルが作成され、ほんの少し小さくなります。これは、gz形式でできる最善の方法です。
tarが圧縮できることを最近知ったばかりで、最小の ".tar.gz"ファイルが必要な理由を言わなかったので、xzなどのtarファイルで使用できるより効率的な形式があることに気付かないかもしれません。一般に、別の形式に切り替えると、gzipオプションをいじるよりも圧縮率が大幅に向上します。xzの主な欠点は、gzipほど一般的ではないため、ファイルの送信先が新しいパッケージをインストールしなければならない場合があることです。また、特に圧縮する場合、少し遅くなる傾向があります。これが問題にならず、本当に最小のtarファイルが必要な場合は、次を試してください。
tar cv path/to/data | xz -9 > file.tar.xz
Ubuntu 13.10などの最新バージョンのtarは、圧縮ファイルを自動的に検出します。したがって、xz圧縮を使用している場合でも、通常どおり解凍できます。
tar xvf file.tar.xz
これらの圧縮ユーティリティがどのように比較されるかを簡単に理解するために、Linuxカーネルからパッチ3.1.1を圧縮する効果を検討してください。
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
この些細な例では、最小のgzを取得するにはadvdefが必要であることがわかります(ただし、7z -tgzipはほぼ同等であり、バグが少ないです)。また、xzに切り替えると、圧縮に時間がかかりすぎることなく、古いgz形式を最大限に活用しようとするよりもはるかに多くのスペースが得られることがわかります。