非常に大きなディレクトリ(ここではテラバイト単位で通信)をコピーして、進行状況を監視する必要があります。
pv
は素敵なユーティリティであることがわかりましたが、ディレクトリを再帰的にコピーするためにそれをどのように使用できますか? (pv src > dst
はディレクトリであるため機能しません)
PS:OS X Mountain Lionで実行され、pv
がMac Portsからインストールされました
rsync --progress [SRC] [DST]
を使用
man rsync
ページには、非常に便利なオプションがたくさんあるので、確認してください。アーカイブの-a
は良い出発点ですが、実際の要件によって異なります。
パイプを介してコピーすると、特にファイルベースの場合、コピープロセスが不必要に遅くなります。
tar
またはpax
またはcpio
を使用できます。
mkdir -p dst &&
(cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
タール。
tar -cf - /var/log/ | pv | tar -C . -x
例:
# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [ <=>
進行状況の情報を含むディレクトリをコピーするいくつかのコマンドを次に示します。
小さなファイルがたくさんある場合:
cp -av sourcedir targetdir | pv -l -s filecount > logfile
これは、コピーされるファイルの数に基づいて進行状況を報告します。
logfile
が必要ない場合は、/dev/null
にリダイレクトできます。
次のコマンドを使用して、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の利点は、ネットワーク経由でコピーする場合、または以前のコピーを更新(または比較)する場合です。
詳細はこちらをご覧ください:
あなたはdu -b /directory/
コピー元とコピー先の両方で、通常のコピーコマンドの実行中に、2つを比較します。これは同じように効果的であり、パイプを介してプッシュすることによってコピープロセスを遅くしません。