仕事がダラけてしまったのでシェルスクリプトでプログレスバーやってみた
やっぱ、プログレスバーがないと動いているのか分からなくてイラっとくるよね。というので、シェルスクリプトでプログレスバーを簡単にできないかな、と思い書いてみた。
progress() { _bar=$1; _bar=${_bar:=.} while : do jobs %1 > /dev/null 2>&1 [ $? = 0 ] || break echo -n ${_bar} sleep 0.1 done; } usage() { echo "usage:$0 [command]"; exit; } [ $# = 0 ] && usage "$@" & progress
上記コードをprogress.shとして、こんな感じで時間がかかりそうな処理のコマンドを引数に渡してあげればOK.
./progress.sh sleep 10 ..............................................................................................
barコマンド
しかし、探せばこんなごみコード書かなくても便利なものがあったりもする。このbarコマンドはcatのプログレスバー付きコマンドという感じです。これ、すげー便利じゃないですか。最初からこれにすればよかった。
http://www.theiling.de/projects/bar.html
まずはテストゴミファイル
dd if=/dev/urandom of=hoge.img bs=1M count=10
圧縮してバックアップ。
./bar -n hoge.img | gzip -1 > hoge.img.gz 91% [==============================================================......]
圧縮ファイルの展開。
./bar -n hoge.img.gz | gzip -d -c > hoge-new.img 85% [==========================================================..........]
ファイルのコピー。
でもこの -o オプションは 「 -o FILE (Redirects output to a file.)」 とアウトプットするファイルを指定するので、通常のcpとは順番が逆になる。 「cp source dest」 ではなく 「bar -o dest source」 間違えやすいのに間違えるとコピー元ファイルは0バイトになってしまう漢らしいシンタックスだ。
./bar-1.4$ ./bar -o dst src 60% [=========================================...........................]
潔し、っていうコマンドはいいですね。身が引き締まります。