受信側の例外を除いて、送信側に存在しない受信側のファイルを削除するようにrsyncに要求する


29

私はこれらのスレッドを読みました:

しかし、私が知る限り(おそらく私は何かを見逃しています)、彼らは次の質問をカバーしていません:

rsync例外を除いて、送信側に存在しない受信側のファイルをコピーして削除するにはどうすればよいですか?(たとえば.hg、送信側にリポジトリがない場合でも、受信側の水銀リポジトリを削除しないでください)。

一つの可能​​性は?

以下の@Richard Hollowayの回答から引用。次の行があるとします。

rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path

私の知る限り、この行はrsync、で一致しdont_delete_meたものを除き、送信パス上に存在しない受信パス上のすべてを削除します。私の質問は次のとおりです。rsyncは、送信側で何も一致しなくても、受信側で一致するファイルを保持しますか?dont_delete_me dont_delete_me

回答:


33

一緒に使用する--delete--exclude、除外された場所にあるものは、ソースファイルが削除されても削除されません。

しかし、それはフォルダがまったくrsync「d」にならないという問題を引き起こします。そのrsyncためsync、そのフォルダに対して別のジョブが必要になります。

例えば。

rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh

これらを逆に実行することもできますが、削除されたすべてのファイルが削除されてから置き換えられますが、効率的ではありません。

ワンライナーとしてはできません。


@Richardに感謝します。あなたの答えは、私の元の質問が思ったより簡単だったかもしれないと思うようにしています。単一の行を使用する場合:rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/pathrsync一致するものを除いて、送信パス上に存在しない受信パス上のすべてを削除しませんdont_delete_meか?最も重要なのは、考えrsyncで一致した受信側で物事を保つdont_delete_me 送信側の一致にたとえ何dont_delete_me?その場合、必要なのはそれだけだと思いますか?
アメリオバスケスレイナ

正しいですが、1行で行うと、新しいファイルやdont_delete_meフォルダーへの変更も取得されません。変更や追加を同期したくない場合は、ここで説明したように--excludeフラグを使用できます。
リチャードホロウェイ

@AmV除外されたファイルは--delete、明示的に指定しない限り、によって削除されません--delete-excluded--deleteおよび--delete-excludedrsyncマニュアルの説明を参照してください。
ジル 'SO-悪であるのをやめる'

4

次の解決策が私の目的に合っていることがわかりました。

rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest

(注:追加-nドライランを行うためのオプションをし、変更しないでください--delete--delete-excluded!)

コマンドを実行すると、次のプロパティが発生します。

  • ソースsrcディレクトリは変更されないままです
  • 次のdest場合を除き、宛先フォルダーはソースフォルダーと一致します。

    • do_not_send_to_destリストの項目は宛先に送信されません。
    • do_not_modify_in_destリストの項目は宛先で変更されないままになります。
  • (注:存在しない項目が " do_not_"ファイルのいずれかにリストされていても問題ありません。)

説明

rsyncはコマンドライン引数を左から右に読み取るため、--delete引数によってrsyncが内部的に「モードを切り替える」ようになり(ある意味)、--exclude-fromオプションの2回目の使用を可能にしますが、意味は異なります。

警告:

  • do_not_send_to_destリストの項目が宛先にすでに存在する場合、次のようになります。

    • このコマンドは、その項目が宛先から削除されません(項目が最初にソースディレクトリから削除されない限り)
    • 注意:に変更--deleteする--delete-excludedと、2つのリストのいずれかにリストされている宛先のすべてが削除されます。xD(おそらく、rsyncはオープン/フレキシブルになるように作成されましたが、微妙な違いがありますか?)

軽く使用テスト済み。

rsync version 3.0.9 protocol version 30」を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.