web-dev-qa-db-ja.com

tar -zcvfを使用するときに圧縮レベルを指定する方法

仕事中にディレクトリをgzipします。私が普段していることは

tar -zcvf file.tar.gz /path/to/directory

ここで圧縮レベルを指定する方法はありますか?圧縮に時間がかかる場合でも、可能な限り最高の圧縮を使用したいです。

135
Lazer
GZIP=-9 tar cvzf file.tar.gz /path/to/directory

bashを使っているとしましょう。一般的には、GZIP環境変数を "-9"に設定し、通常通りtarを実行してください。

また、もしあなたが本当に最高の圧縮を望むなら、gzipを使わないでください。 lzmaまたは7zを使用してください。

そしてgzip(これはとにかく様々な理由で良い考えです)を使うとき、pigzではなくgzipプログラムを使うことを検討してください。

130
user7385

Tarにgzipフラグを使用する代わりに、tarプロセスの後にファイルを手動でgzipしてから、gzipプログラムの圧縮レベルを指定できます。

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

またはあなたが使用することができます:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

Gzipコマンドラインの-9は、gzipに可能な限り最大の圧縮レベルを使用するように指示します(デフォルトは-6)。

編集:@depeszコメントに基づくパイプコマンドラインを修正しました。

64
Matrix Mole

最近のバージョンのtarはxzアーカイブフォーマットをサポートしています(2009年のGNU tar、 1.22以降、 、Busybox 以降、1.17.0 2010年に)。

lzma2 に基づいており、 7-Zip バージョンの のようなものです。/gz 。 xzをサポートする必要があるという要件に問題がなければ、これにより圧縮率が向上します。

tar -Jcvf file.tar.xz /path/to/directory

here (基本的にはこの質問の重複ですが、Unixのスタック交換で)XZ圧縮レベルを制御するためのXZ_OPT = -9環境変数もあることがわかりました。他の記事のGZIPに似ています。

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
48
David C. Bishop
tar cv /path/to/directory | gzip --best > file.tar.gz

これはMatrix Moleの2番目の解決策ですが、少し短くなりました。

Tarを呼び出すとき、オプションfは出力がファイルであることを示します。 -(stdout)に設定すると、tarはf-の両方を指定しない場合のデフォルトの動作であるstdoutに出力を書き込みます。

gzipのmanページで述べられているように、ファイルが指定されていない場合、gzipは標準入力から圧縮します。 gzip呼び出しでは-は必要ありません。

オプション--best-9と同等)は最高の圧縮レベルを設定します。

29
carlito

-Iを使用して圧縮プログラムを指定するオプションもあります。これには、圧縮レベルのオプションを含めることができます。

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
10
Chris Gibson

そしてもちろん、macOSのBSDから派生したtarは異なる必要があります。

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory
2
rfay