it-swarm-ja.tech

rsyncを介してdest dirから不要なファイルを削除しますか?

私が持っていると言います

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

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

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

51
Cheng

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

-削除

これは、rsyncに受信側(送信側にないファイル)から無関係なファイルを削除するように指示しますが、同期されているディレクトリに対してのみです。 ワイルドカードはディレクトリの内容なので、ディレクトリの内容(たとえば「dir/*」)にワイルドカードを使用せずに、ディレクトリ全体(たとえば「dir」または「dir /」)を送信するようにrsyncに要求している必要がありますシェルによって展開され、rsyncは、ファイルの親ディレクトリではなく、個々のファイルを転送するリクエストを取得します。転送から除外されたファイルは、-を使用しない限り、削除から除外されます。 delete-excludedオプションを使用するか、送信側でのみ一致するルールをマークします(「フィルタールール」セクションの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側の除外されたファイルも確実に削除されます。

73
Steven D