brand new note

ジャズ屋が技術の話をするところ

進捗率を表示するpvコマンド

aptとかyumしたときに表示される進捗率をあらわすプログレスバー。pvコマンドを用いると簡単にこれを実装することができます。時間がかかる処理を自作した場合に対して有効です。使ったことがない方はまずインストールしてみましょう。

sudo apt install pv

使い方

時間がかかる処理ということで、試しに大きなファイルの圧縮をやってみましょう。まず500MBのダミーファイルを用意します。

dd bs=500000000 count=1 if=/dev/zero of=bigfile1.dat
dd bs=500000000 count=1 if=/dev/zero of=bigfile2.dat

ダミーファイルの作り方の説明はこちら

/dev/zeroってなんだ - brand new note


次に作成した二つのファイルをアーカイブし、圧縮します。tarの引数に-を指定することによって、コマンドの出力を標準出力に出すことができます。これにより、パイプで進捗率をpvコマンドに渡すことが可能になります。最後にgzipコマンドに渡して圧縮します。

tar cf - bigfile1.dat bigfile2.dat | pv | gzip > archive.tar.gz

 

ikeda@DESKTOP-4B08IPQ:/tmp/myapp/datadir$ tar cf - bigfile1.dat bigfile2.dat | pv | gzip > archive2.tar.gz
 953MiB 0:00:06 [ 137MiB/s] [            <=>                                                                           ]

プログレスバーで圧縮中の様子を観察することができます。左から順にトータルのデータ量、経過時間、処理速度が出力されているのがわかります。

参考

UNIXシェルスクリプト マスターピース132

UNIXシェルスクリプト マスターピース132