rsync
これは、ローカル システムとリモート システムの両方を対象とする多くのクライアント/サーバー バックグラウンド作業を行うため、適切な選択ではありません。
mv
おそらく最良の選択です。可能であれば、mv directory_old directory_new
を試してください。 mv directory_old/* directory_new/
ではなく .この方法では、100 万の物ではなく 1 つの物を移動します。
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
- これにより、引数の展開がオーバーフローしません。
- 必要に応じて、ファイル拡張子を指定できます。 (-name ...)
find -print0
xargs -0
で 名前にスペースを使用できます。xargs -r
mv
は実行されません 何か動かなければ。 (mv
ソースファイルが指定されていない場合は文句を言います)。- 構文
mv -t
xargs
で必要な、最初に宛先、次にソース ファイルを指定できます . - ディレクトリ全体の移動は、含まれるファイルの数に関係なく一定の時間で行われるため、もちろんはるかに高速ですが、
- ソース ディレクトリが一瞬消えるため、問題が発生する可能性があります。
- プロセスが現在のディレクトリを出力ディレクトリとして使用している場合 (移動しない場所からのフル パスを常に参照するのとは対照的に)、プロセスを再起動する必要があります。 (ログのローテーションと同じように ).
ところで、そんなに大量のファイルを一度に移動しなければならないのかと自問自答します。バッチ処理は過大評価されています。生成された瞬間に処理できるのであれば、大量の作業を蓄積しないようにしています。
2 つのディレクトリが同じファイル システムにある場合は、mv
を使用します。 ディレクトリの内容ではなく、ディレクトリに。
それらが 2 つの異なるファイルシステムに存在する場合は、rsync を使用してください:
rsync -av /source/directory/ /destination
末尾の /
に注意してください ソースで。これは、ディレクトリ自体ではなく、ディレクトリのコンテンツをコピーすることを意味します。 /
を離れると オフにすると、ファイルはコピーされますが、/destination/directory
という名前のディレクトリに保存されます。 . / を使用すると、ファイルは /destination
になります。
rsync
ルートとして実行した場合、またはファイルがあなたによって所有されている場合、ファイルの所有権を維持します。 mtime
も維持します