回答:
rsync
ローカルシステムとリモートシステムの両方に対応する多くのクライアント/サーバーバックグラウンド処理を行うため、これは適切な選択ではありません。
mv
おそらく最良の選択です。可能であれば、mv directory_old directory_new
ではなく試してくださいmv directory_old/* directory_new/
。このようにして、100万個ではなく1個のものを移動します。
mv
、数百万について話している場合にサポートされる最大の引数を壊す可能性があります。
mv
iノード情報を更新するだけなので、mv directory_old directory_new
より速く動作しますmv directory_old/* directory_new
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
find -print0
with xargs -0
では、名前にスペースを使用できます。xargs -r
移動するものがmv
なければ実行されません。(mv
ソースファイルが与えられないと文句を言うでしょう)。mv -t
は、最初に宛先を指定し、次にで必要なソースファイルを指定できますxargs
。ちなみに、本当に大量のファイルを一度に移動する必要があるのかと自問します。バッチ処理は過大評価されています。出来上がった瞬間に処理できるのであれば、膨大な量の作業を積み重ねないようにしています。
2つのディレクトリが同じファイルシステムにある場合mv
は、ディレクトリのコンテンツではなく、ディレクトリで使用します。
2つの異なるファイルシステムにある場合は、rsyncを使用します。
rsync -av /source/directory/ /destination
/
ソースの末尾に注意してください。つまり、ディレクトリ自体ではなく、ディレクトリのコンテンツをコピーします。/
オフのままにしても、ファイルはコピーされますが、という名前のディレクトリに置かれ/destination/directory
ます。/を使用すると、ファイルは/destination
rsync
ルートとして実行した場合、またはファイルの所有者である場合は、ファイルの所有権を維持します。また、mtime
個々のファイルのを維持します。
rsync
は周りを回るようmv
です。先端をありがとう!
tar cf - dir1 | (cd dir2; tar xf -)
tar cf - dir1 | ssh remote_host "( cd /path/to/dir2; tar xf - )"
'cp'を使用すると、各ファイルはopen-read-close-open-write-closeを実行します。Tarは、読み取りと書き込みに複数のプロセスを使用し、同時に複数のトレッドを操作して複数のファイルを操作します。シングルCPUボックスでも、マルチスレッドアプリの方が高速です。
tar c | tar x
すると、O(file_count)の代わりにO(total_size)のコストが発生します。
それは依存します(tm)。ファイルシステムがコピーオンライトの場合、コピー(cp
またはrsync
など)はムーブに相当するはずです。しかし、ほとんどの一般的なケースでは、移動(mv
)が最速になります。移動()は、ファイルの配置場所を示すデータの断片を切り替えるだけなので(注:これは過度に単純化されています)。
だから、あなたの平均的なLinuxインストールでは、私は行くでしょうmv
。
編集: @FrédéricHamidiはコメントで良い点を持っています:これは、両方が同じファイルシステムとディスク上にある場合にのみ有効です。それ以外の場合、データはとにかくコピーされます。
宛先の性質により、このタスクを実行する最も効率的な方法が決まります。あなたがローカルシステム上にいると仮定しましょう、あなたPWD
は/
今です。そして/a
、画像の何百万人が含まれています。私たちの仕事は/b
、すべてのサブディレクトリ構造を維持しながら、すべての画像をに移動することです。また、それぞれがローカルに接続されたディスク上の2つの異なるパーティションのマウントポイントであると仮定/a
し/b
ます。ターピペでこのタスクを実行したいと思います。これには多少時間がかかる場合がありますので、必ず使用している作るscreen
、tmux
またはあなたは、バックグラウンド・プロセスとしてこれを実行します。
tar -C /a -cf . | tar -C /b -xf -
これにより、すべてのファイルとディレクトリがにコピーされる/a
ため/b
、/a
エラーなしで完了したことを確認したら、クリーンアップする必要があります。
mv
ソースとターゲットの両方のディレクトリが同じファイルシステムにある場合、パフォーマンスの点で優れているとは思いません。