仕事中にディレクトリをgzipします。私が普段していることは
tar -zcvf file.tar.gz /path/to/directory
ここで圧縮レベルを指定する方法はありますか?圧縮に時間がかかる場合でも、可能な限り最高の圧縮を使用したいです。
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
bashを使っているとしましょう。一般的には、GZIP環境変数を "-9"に設定し、通常通りtarを実行してください。
また、もしあなたが本当に最高の圧縮を望むなら、gzipを使わないでください。 lzmaまたは7zを使用してください。
そしてgzip(これはとにかく様々な理由で良い考えです)を使うとき、pigz
ではなくgzip
プログラムを使うことを検討してください。
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コメントに基づくパイプコマンドラインを修正しました。
最近のバージョンの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
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
と同等)は最高の圧縮レベルを設定します。
-Iを使用して圧縮プログラムを指定するオプションもあります。これには、圧縮レベルのオプションを含めることができます。
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
そしてもちろん、macOSのBSDから派生したtarは異なる必要があります。
tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory