回答:
コマンドが機能しない理由は、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側の除外ファイルも削除されます。
--delete-excluded
。それがなければ、のみ*.jpg
と*.txt
デスティネーション側で削除されることがあります。これにより、無関係なファイルも削除されます。rsyncフィルターに関するこのチュートリアルに興味があるかもしれません。