これが事です、
サーバー上に50GBのサイズのフォルダーがあり、そのフォルダーには60000を超えるファイルが含まれています。 rsyncを使用してミラーサーバーに転送しましたが、ファイルのほぼ半分が転送されました。メインサーバーで転送されたファイルを削除したいと思います。
これはrsyncで実行できますか?ヘルプを読んで--deleteオプションを見つけましたが、これらのファイルは非常に重要なので、専門家の意見に感謝したいと思います。
rsync(バージョン3.0.9でチェック済み)には、--remove-source-files
というオプションがあります。転送されたファイルのみを削除し、まだ転送されていない追加のファイルを転送したくない場合は、オプション `--existing``を追加で使用する必要があります。
残念ながら、オプション--verbose --itemize-changes --stats
が使用されていても、rsyncは削除するファイルを出力しないようです。
# create source and target dirs
mkdir /tmp/source
mkdir /tmp/target
# create a test file in source
touch /tmp/source/test
# rsync source and target
rsync --archive --itemize-changes --verbose --stats /tmp/source/ /tmp/target
# verify that test has been copied to target
[ -f /tmp/target/test ] && echo "Found" || echo "Not found"
# create another file in source
touch /tmp/source/test2
# delete files on source which are already existing on target
rsync --archive --itemize-changes --verbose --stats --remove-source-files --existing /tmp/source/ /tmp/target
# verify that test has been deleted on source
[ -f /tmp/source/test ] && echo "Found" || echo "Not found"
# verify that test2 still exists on source and was not transferred to target
[ -f /tmp/source/test2 ] && echo "Found" || echo "Not found"
[ -f /tmp/target/test2 ] && echo "Found" || echo "Not found"
前に書いたように、rsyncはソースから削除せず、宛先でのみ削除します。
あなたの場合、ミラーサーバー上のファイルのMD5ハッシュを生成してから、プライマリサーバーでハッシュが正しいかどうかを確認し、それらのファイルを削除します。
つまり:
mirror$ find . -type f -print0 | xargs -0 md5sum > mirror.md5
..mirror.md5をプライマリサーバーに転送します。
primary$ md5sum -c mirror.md5
FAILEDファイルがないか確認してから、正常に転送されたファイルを削除します。次のように自動化できます。
md5sum -c mirror.md5 | grep 'OK$' | sed -e 's/: OK$//' | while read FILE; do rm "$FILE"; done
これにより、すべてのファイルが適切なハッシュでフィルタリングされ、md5sumから「OK」の部分が切り取られ、ファイルが1つずつ削除されます。
言うまでもなく、この後、あなたはしないでください rsyncから--deleteオプションを使用してファイルの後半を転送したいと思います...