rsyncを介してターゲットディレクトリから無関係なファイルを削除しますか?

rsyncを介してターゲットディレクトリから無関係なファイルを削除しますか?

私が持っていると言う

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

DEST
  hello.jpg

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

DESTからhello.jpgを削除しません。アーカイブする方法を知っていますか?

ベストアンサー1

コマンドが機能しない理由は次のとおりです。rsync のマニュアルページ(強調する):

- 削除

これは、rsyncに受信側から不要なファイル(送信側にないファイル)を削除するように指示しますが、同期されているディレクトリからのみ削除されます。 ディレクトリの内容( "dir / *"など)にワイルドカードを使用せずにディレクトリ全体( "dir"または "dir /"など)を送信するようにrsyncに要求する必要があります。ワイルドカードはシェルによって拡張されるため、rsyncはファイルの親ディレクトリではなく単一のファイルを転送するように要求されます。 --delete-excludedオプションを使用するか、転送側でのみ一致するようにルールを表示しない限り、転送から除外されたファイルは削除されません(フィルタリングルールセクションの包含/除外修飾子を参照)。

だからあなたが走るとき

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

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

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

包含および除外ディレクティブの順序が重要です。デフォルトでは、各ファイルはインクルードまたは除外パターンが表示される順番でチェックされます。したがって、拡張子が.jpgまたは.txtのファイルは、除外された「*」パターンと一致する前に「含まれる」パターンと一致するため、同期されます。他のすべては--exclude '*'このパターンから除外されます。この--delete-excludedオプションを使用すると、DEST側から除外されたファイルも削除されます。

おすすめ記事