回答:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
bashを使用していると仮定します。通常、GZIP環境変数を「-9」に設定し、tarを通常どおり実行します。
また、本当に最高の圧縮が必要な場合は、gzipを使用しないでください。lzmaまたは7zを使用します。
また、gzipを使用する場合(とにかくさまざまな理由で良い考えです)pigz
、ではなくプログラムの使用を検討してくださいgzip
。
GZIP_OPT
、使用方法は同じになります。
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コメントに基づいてパイプコマンドラインを修正しました。
file.tar
、最初の例はで終わる必要がありgzip
ます。
f -
?ファイルがない場合は、stdin / out
tarの最新バージョンは、xzアーカイブ形式をサポートしています(GNU tar、2009年の1.22 以降、Busyboxは2010年の1.17.0 以降)。
これは、gzの7-Zipバージョンのようなlzma2に基づいています。これにより、xzサポートを必要とする要件を満たしていれば、より良い圧縮が得られます。
tar -Jcvf file.tar.xz /path/to/directory
私はここで(基本的にこの質問のduですが、Unixスタック交換で)、他の投稿のGZIPと同様にXZ圧縮レベルを制御するXZ_OPT = -9環境変数があることを発見しました。
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は出力をstdoutに書き込みます。stdoutは、f
との両方がないデフォルトの動作です-
。
また、gzip
マニュアルページで述べられているように、ファイルが指定されていない場合、gzipは標準入力から圧縮します。以下のための必要はありません-
でのgzip
通話が。
オプション--best
(に相当-9
)は、最高の圧縮レベルを設定します。
xz
し、pixz
あまりにも。中間の.tarファイルを作成せずに、並列圧縮に使用されるスレッドの数を制御するのに最適な方法です。そうですtar -cv /path/to/dir | pixz -p4 > output.tpxz
top
200%-400 $ CPUの間のどこでも使用して見ることができます。