Linuxのファイルコピーコマンド cp はよく使うコマンドですが、巨大なファイルをコピーする際に進捗状況が欲しくなります。そんなときに役立つ代替方法がこちらです。
1. rsync コマンドを使う
多くの場合、cp の代わりとして推奨される方法です。--progress オプションで、転送率、速度、残り時間をリアルタイムに表示できます。
rsync -avh --progress source_file destination2. 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:393. 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