Rsync、2つのソースからコピー:2番目のソースから同じターゲットに同期した後に最初のソースからファイルを削除しない方法は?

Rsync、2つのソースからコピー:2番目のソースから同じターゲットに同期した後に最初のソースからファイルを削除しない方法は?

同じターゲットフォルダに同期し続けたいソースフォルダが2つあります。私は通常2つの別々のコマンドを発行します。

rsync -auP --delete-before "/source1/" "/detination/"
rsync -auP --delete-before "/source2/" "/detination/"

ただし、2番目のコマンドを発行すると、そのsource1オプションによってコピーされたファイルは当然存在しないためsource2削除されます--delete-before

両方のソースの1:1コピーを同じターゲットに同期する方法をご存知ですか?私はこの問題を解決するために次のことができることを知っています。

rsync -auP --delete-before "/source1/" "/detination/source1/"
rsync -auP --delete-before "/source2/" "/detination/source2/"

しかし、以前に述べた結果が得られ続けることを確認したかったのです。

答え1

Rsyncには履歴がありません。 「treeAのように見えますが、treeBに存在するファイルは削除しないでください」と自動的に言う方法はありません。

あなたの質問では、ツリーの1:1コピーが必要ですが、マージされたコピーが欲しいようです。

次のように、より複雑なタスクを実行できます。

  • rsync treeBと送信されたすべてのファイルの履歴(-iを使用)
  • ファイル名のみを含むリストにファイルを後処理して転送しました。
  • rsync treeA 以前のすべてのファイルを除外

両方のファイルにファイルがある場合は、treeBのコピーになります。ファイルが1つだけに存在する場合は、そのディレクトリにあります。欠点は、treeAにのみ存在するすべてのファイルが絶えず削除され、実行されるたびに再コピーされることです。

関連情報