一部の圧縮プログラムは、xz -v
のように、タスクの実行中に情報(圧縮率や時間とサイズの合計など)を表示できます。 :
--- % 2,580.2 KiB / 6,552.0 KiB = 0.394 1.2 MiB/s 0:05
大きなファイルを圧縮しているときに、タスクの途中で圧縮率を知りたいので、圧縮率が低い場合はプロセスを停止して、圧縮しないままにしておくことができます。
この機能を備えた他のプログラムはありますか? (xz
圧縮率は高いが遅い)
承認された回答:
これを行う一般的な方法は、pv
のようなものを使用することです。 圧縮プログラムの入力サイズと出力サイズの両方を監視します。例:
$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null
out: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
in: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
ランダムデータを圧縮しようとしたときに予想されるように、出力サイズが入力サイズと同じであることを上で確認するのは簡単です。
代わりに、非常によく圧縮されるファイルを試してみる場合:
$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null
out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [ <=> ]
in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [ <=> ]
出力サイズは2.62MiB、入力は2.65GiBで、3桁大きくなっています。
副次的な利点として、通常のファイルで使用する場合は、pv
ETAを提供します:
$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null
out: 578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [ <=> ]
in: 595MiB 0:00:27 [22.1MiB/s] [ 22MiB/s] [==> ] 15% ETA 0:02:25
Jessie DVDイメージはほとんどが圧縮ファイルであるため、あまり圧縮されませんが、完了するまでにさらに2分半かかります。
pv -d
を使用することもできます すでに実行中のプロセスを監視します。これを実行中のコンプレッサーに適用すると、入力ファイルと出力ファイルのどこにあるかがわかり、比率をすばやく確認できます。
$ pv -pterba -d "$(pidof gzip)"
3:/var/tmp/mp3s.tar: 911MiB 0:00:44 [ 20MiB/s] [19.9MiB/s] [> ] 9% ETA 0:07:35
4:/var/tmp/mp3s.tar.gz: 906MiB 0:00:44 [ 20MiB/s] [19.8MiB/s] [ <=> ]
MP3のtarファイルも十分に圧縮されません。
注: 多くのコンプレッサーはブロックごとに動作します。そのため、転送速度が急上昇してから0になるなど、繰り返し表示される場合があります。期待される比率を実際に把握する前に、コンプレッサーを少しの間稼働させる必要があります。スパイクの直後は、おそらくブロックで読み取られますが、圧縮バージョンはまだ書き込まれていません。ただし、すでに10ブロック待機している場合は、最大で10%のエラーになります。
関連:プログラムがSIGKILLシグナルを送信すると、プログラムは何をしますか?
(私が使用しているpvオプション:-p
プログレスバーをオンにします。 -t
経過時間をオンにします。 -e
ETAをオンにします。 -r
転送速度を表示します。 -b
バイトカウンターをオンにします。 -c
複数のpv
を作成するには s配管工事中。 -N
ラベルを設定します。