私が持っていると言う
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側から除外されたファイルも削除されます。