rsyncを使用してソース内のファイルを削除する

rsyncを使用してソース内のファイルを削除する

サーバー「A」にフォルダがあります./delete

./stuffサーバー「A」のフォルダーに存在するサーバー「B」のフォルダー内の./deleteすべての項目を削除したいと思います。

rsyncの逆過程と同じです。からファイルを転送するのではなく、サーバー「B」の2つの場所にあるすべてのファイルを削除したいと思いますa:/deleteb:/stuff

--delete-on-destination旗のようなものです。

ベストアンサー1

rsyncのようなファイルコピーツールはファイルをコピーしたくないので簡単には役に立ちません。

ほとんどの場合、サーバーAにファイルをリストし、サーバーBからファイルを削除する簡単な方法が良いアプローチです。サーバーfindxargsコマンドがNULL区切り文字(Linux、* BSD、Cygwin)を理解している場合は、任意のファイル名を処理する方が簡単です。 Aから:

cd ./delete
find . ! -type d -print0  | ssh B 'cd /path/to/stuff && xargs -0 rm -f'

これにより、一部の空のディレクトリが残る可能性があります。すべての空のディレクトリを削除できます(以前に空のディレクトリを含む)。

ssh B 'cd /path/to/stuff && find . -depth -type d -exec rmdir {} + 2>/dev/null'

ソースに存在するディレクトリのみを削除するには、リストを再利用する必要があります。

find . -depth -type d -print0  | ssh B 'cd /path/to/stuff && xargs -0 rmdir'

Bに存在しない多数のファイルを含むAのディレクトリツリーがある場合、ファイル全体のリストは削除のために送信されますが、rm -rfBの慎重に選択されたディレクトリツリーはBでローカルに同じことを行います。伝送帯域幅が大幅に節約されます。この場合、ファイル同期ツールが機能します。実行しrsync -nvて出力を解析できますが、それに基づいて信頼できるものを構築するのは簡単ではありません。

おすすめ記事