揮発性のメモ2

http://d.hatena.ne.jp/iww/

cp -ax の進捗を見る

大量のファイルをコピーしてるとき、今何個コピーしたとか何秒経ったかを表示する。

あらかじめファイルの数を数えておき、何個中何個コピーしたかを毎秒表示する。
あと経過時間もついでに表示する。

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コマンド

ファイル単位でのプログレスしか出なかった

rsyncコマンド

ファイル単位でのプログレスしか出なかった