質問: 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を削除しません、これをアーカイブする方法はありますか?
回答: コマンドが機能しない理由は 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側の除外されたファイルも確実に削除されます。