rsyncを使用してdestディレクトリから無関係なファイルを削除しますか?


51

私が持っていると言う

SRC 
  001.jpg
  002.jpg
  001.txt
  a.zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

DESTからhello.jpgを削除しません。これをアーカイブする方法はありますか?

回答:


72

コマンドが機能しない理由は、rsyncマニュアルページで説明されています(強調を追加)。

-削除

これにより、rsyncは受信側(送信側にないファイル)から無関係なファイルを削除しますが、同期されているディレクトリのみを削除します。 ワイルドカードはシェルによって展開され、rsyncが取得されるため、ディレクトリの内容にワイルドカード(例: "dir / *")を使用せずにディレクトリ全体(例: "dir"または "dir /")を送信するようrsyncに要求する必要があります。ファイルの親ディレクトリではなく、個々のファイルを転送するリクエスト。 転送から除外されたファイルも、-delete-excludedオプションを使用するか、ルールを送信側でのみ一致するものとしてマークしない限り、削除から除外されます(FILTER RULESセクションのinclude / exclude修飾子を参照)。

したがって、実行すると

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

DESTの不要なファイルは削除されません。これは、ディレクトリの同期を実際に要求するのではなく、少数の特定のファイルだけを要求するためです。希望する結果を得るには、次のようなものを試してください。

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

includeおよびexcludeディレクティブの順序が重要であることに注意してください。基本的に、各ファイルは、含まれるパターンまたは除外されるパターンに対して、出現順にチェックされます。したがって、拡張子が.jpgまたは.txtのファイルは、除外された「*」パターンと一致する前に「含まれた」パターンと一致するため、同期されます。それ以外はすべて--exclude '*'パターンによって除外されます。この--delete-excludedオプションにより、DEST側の除外ファイルも削除されます。


@チェン、もう少し説明してくれませんか?問題/改善がある場合は、回答を更新させていただきます。
スティーブンD

できます。私は推測する。--processの事は私を混乱させ、再び転送されたと思わせます。
チェン

回答を編集して、もう少し説明します。
スティーブンD

2
@チェン:あなたがしたくないと思う--delete-excluded。それがなければ、のみ*.jpg*.txtデスティネーション側で削除されることがあります。これにより、無関係なファイルも削除されます。rsyncフィルターに関するこのチュートリアルに興味があるかもしれません。
ジル 'SO-悪である停止

3
ありがとう!私にとっては、ソースディレクトリの末尾のスラッシュが欠落していました。
ヴォーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.