私はtar + gzipの使い方を理解していますが、tar
は通常、ファイルのグループを単一のファイルにまとめるために使われ、gzip
はそのファイルを圧縮するために使われます。
私は最近tar
も圧縮できることを知りました。
圧縮がどのように機能するのか完全には理解できていないので、gzipに圧縮済みの.tarを送信するとgzipが圧縮できなくなる可能性があり、そのようなことが起こる可能性があります。
私の質問は本質的に:私は絶対最小のtar.gzを作成するためにどのようなargs/compression方法の組み合わせを使うべきですか、そしてそのためのコマンドラインステートメントはどんなものですか?
または、次のようにしてtarにユーザーの最大圧縮を指定することもできます。
export GZIP=-9
tar cvzf file.tar.gz /path/to/directory
さらに、環境を雑然としないようにするには、次のようにします。
env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
" tarはもcompress "と言うことができますが、これは - tar
が 常に - それ自体でデータを圧縮することを意味するのではありません。
z
オプションと一緒に使用した場合にのみそうなります。それ自体もそうではありませんが、 - tarされたデータをgzipに渡すことによってです。
しかし、代わりに、 この の回答で説明したように、2つのコマンドをパイプすることができます。tar
&gzip
これにより、gzip
コマンドの圧縮レベルを明示的に指定できます。最小の出力サイズを達成する。
tar cvf - /path/to /ディレクトリ| gzip -9 - > file.tar.gz
ここで9
は最大可能圧縮レベルを指定します。
通常gzipもtarも "絶対最小のtar.gz"を作成することはできません。 gz形式に圧縮できる圧縮ユーティリティはたくさんあります。最小のファイルを取得するためにgzip
、7z
およびadvdef
を試すbashスクリプト「 gz99 」を書きました。これを使用して最小のファイルを作成するには、次のコマンドを実行します。
tar c path/to/data | gz99 file.gz
AdvanceCOMPのadvdef
ユーティリティは通常最小のファイルを提供しますが、これもバグです(gz99
ユーティリティはadvdef
の出力を受け入れる前にファイルが破損していないことを確認します)。 advdef
を直接使用するには、file.tar.gzを作成してください。次に実行します。
advdef -z -4 file.tar.gz
これは標準のgzファイルを作成し、それは普通のgzipとtarで読むことができます。これはあなたが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カーネルからpatch-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形式を最大限に活用しようとするよりもはるかに多くのスペースを得ることがわかります。
tar c /path/to/data | gzip --best > file.tar.gz
gzip
オプション--best
(-9
と同等)は最高の圧縮レベルを要求します。