web-dev-qa-db-ja.com

ディレクトリコピーのpvによる進行情報

非常に大きなディレクトリ(ここではテラバイト単位で通信)をコピーして、進行状況を監視する必要があります。

pvは素敵なユーティリティであることがわかりましたが、ディレクトリを再帰的にコピーするためにそれをどのように使用できますか? (pv src > dstはディレクトリであるため機能しません)

PS:OS X Mountain Lionで実行され、pvがMac Portsからインストールされました

14
F.P

rsync --progress [SRC] [DST]を使用

man rsyncページには、非常に便利なオプションがたくさんあるので、確認してください。アーカイブの-aは良い出発点ですが、実際の要件によって異なります。

パイプを介してコピーすると、特にファイルベースの場合、コピープロセスが不必要に遅くなります。

21
jippie

tarまたはpaxまたはcpioを使用できます。

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
10

タール。

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] [                   <=> 
2
Anomalous Awe

進行状況の情報を含むディレクトリをコピーするいくつかのコマンドを次に示します。


小さなファイルがたくさんある場合:

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 -acp -aと実質的に同じです。 rsyncの利点は、ネットワーク経由でコピーする場合、または以前のコピーを更新(または比較)する場合です。

詳細はこちらをご覧ください:

1
lesmana

あなたはdu -b /directory/コピー元とコピー先の両方で、通常のコピーコマンドの実行中に、2つを比較します。これは同じように効果的であり、パイプを介してプッシュすることによってコピープロセスを遅くしません。

0
Apostle