解決策 1:
*
を削除します . rsync のマニュアル ページに記載されているように、--delete
オプションは、ワイルドカード エントリでは機能しません。
代わりにこれを使用してください:
rsync -a --delete $DIR1/ $DIR2/
"--deleteこれは、rsync に受信側 (送信側にないファイル) から余分なファイルを削除するように指示しますが、同期されているディレクトリに対してのみ削除します。ディレクトリ全体を送信するように rsync に要求している必要があります (例:dir
または dir/
) ディレクトリの内容にワイルドカードを使用しない (例:dir/*
) ワイルドカードはシェルによって展開され、rsync はファイルの親ディレクトリではなく、個々のファイルを転送する要求を取得するためです。 --delete-excluded
を使用しない限り、転送から除外されたファイルは削除からも除外されます。 オプションを選択するか、ルールを送信側でのみ一致するものとしてマークします (FILTER RULES セクションの include/exclude 修飾子を参照してください)。"
解決策 2:
その理由は、/tmp/1/b で rsync を呼び出しているためです。これは、/tmp/1/a ファイルをまったく考慮しません。
あなたの意図は、ディレクトリ /tmp/1/ を rsync することであると思われます。個々のファイルではなくソースとして「/tmp/1/」を使用すると、「a」がディレクトリから削除されたことに気づき、削除されます。
解決策 3:
rsync の 2 行目を rsync -a --delete $DIR1/ $DIR2
に変更すると、 (* なし) 動作します。その理由は、シェルが *
を展開するためです。 最初のディレクトリのファイル名に、これはあなたの場合は b だけです。したがって、実行されるコマンドは実際には rsync -a --delete $DIR1/b $DIR2
であるため、不足しているファイル a は rsync によってまったく考慮されません。 .