tar -zcvfで圧縮レベルを指定するには?
仕事でよくディレクトリをgzipします。普段やっているのは
tar -zcvf file.tar.gz /path/to/directory
ここで圧縮レベルを指定する方法はないのでしょうか?圧縮に時間がかかってもできるだけ最適な圧縮を使いたいのですが、何か方法はありますか?
仕事でよくディレクトリをgzipします。普段やっているのは
tar -zcvf file.tar.gz /path/to/directory
ここで圧縮レベルを指定する方法はないのでしょうか?圧縮に時間がかかってもできるだけ最適な圧縮を使いたいのですが、何か方法はありますか?
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 アーカイブ形式をサポートしています (GNU tar, [ 2009年には 1.22 以降、2010年には Busybox 1.17.0 以降)。
これは lzma2 をベースにしており、 gz の 7-Zip バージョンのようなものです。xzのサポートが必要な要件を満たしていれば、これはより良い圧縮を提供します。
tar -Jcvf file.tar.xz /path/to/directory
私はちょうど ここ (基本的にはこの質問のダミーですが、Unix stackexchangeにあります) で、他の投稿にある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 に書き出しますが、これは f
と -
の両方がない場合のデフォルトの動作です。
また、gzip
のマニュアルページにあるように、ファイルが指定されていない場合、gzip は標準入力から圧縮されます。-
の呼び出しではgzip
は必要ありません。
オプション --best
(-9
と同等) は最高の圧縮レベルを設定します。
Iを使って圧縮プログラムを指定するオプションもあります。これには圧縮レベルオプションを含めることができます。
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory