回答:
使用する rsync --progress [SRC] [DST]
man rsync
非常に便利なオプションがたくさんあるので、ページを確認してください。-a
アーカイブのための良いスタートですが、それはあなたの正確な要件に依存します。
パイプを介したコピーは、特にファイルベースの場合、コピープロセスを不必要に遅くします。
あなたは使うことができtar
たりpax
またはcpio
:
mkdir -p dst &&
(cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
v
を追加してtar
、ファイル名を表示できます。
tar cf -
ファイルとそのメタデータを含むストリームを出力します。これはパイプを介してpvに送られtar
、進行状況の表示中に他のファイルにそのまま送られ、もう一方tar
はそのストリームのデータを抽出します。3つのコマンドはすべて同時に実行され、データを処理します。ディスクには何も保存されず、パイプバッファーとコマンド内部バッファー以外のメモリには何も保存されません。
pv
転送するデータ量を知る方法はありません。あなたはその金額の見積もりを持っている場合は、あなたがそれにそれを渡すことができます-s
オプション(GNUがdu -sb src
ファイルが十分な大きさであれば、あなたに良い近似を与えるだろう)
以下に、進行状況情報を含むディレクトリをコピーするコマンドをいくつか示します。
小さなファイルが多数ある場合:
cp -av sourcedir targetdir | pv -l -s filecount > logfile
これにより、コピーされたファイルの数に基づいて進行状況が報告されます。
/dev/null
必要がなければリダイレクトできますlogfile
。
取得するには、次のコマンドを使用しますfilecount
。
find sourcedir | wc -l
巨大なファイルが少ない場合:
tar c sourcedir | pv -s size | tar x -C targetdir
これは、コピーされたバイトに基づいて進行状況を報告します。
targetdir
存在する必要があります。
取得するには、次のコマンドを使用しますsize
。
du -sh sourcedir
rsyncを使用する場合:
rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile
filecount
上記のように取得します。
同じシステムでコピーする場合、rsync -a
実質的にはと同じcp -a
です。rsyncの利点は、ネットワーク経由でコピーする場合、または以前のコピーを更新(または比較)する場合です。
詳細はこちらをご覧ください:
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%