大量のファイルをコピーしてるとき、今何個コピーしたとか何秒経ったかを表示する。
あらかじめファイルの数を数えておき、何個中何個コピーしたかを毎秒表示する。
あと経過時間もついでに表示する。
time cp -ax -v /mnt/ test/ | perl -nE 'BEGIN{$|=1; $z=`find /mnt/ -xdev|wc -l`; chop $z; $s=time()} $c++; $t=time(); if($t!=$o){print " $c/$z (",$t-$s," sec.)\r"; $o=$t; END{print " $c/$z\n"}}'
BEGIN{ $|=1; # printのバッファリングをしない(改行をしなくても画面に出るように) $z=`find /mnt/ -xdev|wc -l`; # コピーするファイル数を数える chop $z; # \nを捨てる $s=time(); # 開始時刻をメモ(findは遅いので、そのあとで) } $c++; # コピー済みファイル数をカウント $t=time(); if($t!=$o){ # 出力は 1秒に1回だけする print " $c/$z (",$t-$s," sec.)\r"; $o=$t; } END{ print " $c/$z\n"; }
これをやることで余計に時間かかって遅くなるかなと思ったけど、1秒も変わらずぜんぜん問題なかった
いまいち使えなかったコマンド
pvコマンド
パイプの流量を測るものなので、cpには使えない
progressコマンド
ファイル単位でのプログレスしか出なかった