ファイルコピー・移動等の進捗を表示する

Linuxのファイルコピーコマンド cp はよく使うコマンドですが、巨大なファイルをコピーする際に進捗状況が欲しくなります。そんなときに役立つ代替方法がこちらです。

1. rsync コマンドを使う

多くの場合、cp の代わりとして推奨される方法です。--progress オプションで、転送率、速度、残り時間をリアルタイムに表示できます。

rsync -avh --progress source_file destination

2. progressコマンドを併用する

既に cp コマンドを実行してしまい、後から進捗を知りたい場合に便利です。別のターミナルで実行すると、動作中の cp や mv の進捗状況をスキャンして表示してくれます。

補足: sudo をつけて実行した cp や mv はsudoをつけて、progress を実行しないと、表示されません。

progress -m

[xxxxxx] cp source_file
         26.1% (37.5GiB / 140.0 GiB) 33.0 MiB/s remaining 0:17:39

3. dd コマンドを使う

ディスクイメージの作成などによく使われる dd コマンドも、オプションで進捗を表示できます。また、巨大なファイルの場合はRead/Writeのブロックサイズを大きく(例: 4MB、16MB)指定することで、ディスク本来の速度に近いパフォーマンスが出せます。

dd if=source_file of=destination status=progress
dd if=source_file of=destination bs=16M status=progress conv=fsync

ピーが「一瞬で終わったように見えている」可能性

巨大なファイルを USB メモリ等にコピーしている場合、OS の「書き込みキャッシュ」機能により、実際にはまだ書き込んでいる最中なのに cp コマンド自体は終了したと誤認され、progress の監視対象から外れてしまうことがあります。 

もし cp がすでに終了してプロンプトに戻っているのに、ディスクのアクセスランプが点滅しているような場合は、以下のコマンドで「物理的な書き込み」が終わるのを待ってください。

sync が終了するまでが、本当のコピー時間です。

sync

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です