同じターゲットフォルダに同期し続けたいソースフォルダが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にのみ存在するすべてのファイルが絶えず削除され、実行されるたびに再コピーされることです。