![Rsync,从两个源复制:如何避免在将文件从第二个源同步到同一目标后删除第一个源中的文件?](https://linux22.com/image/191085/Rsync%EF%BC%8C%E4%BB%8E%E4%B8%A4%E4%B8%AA%E6%BA%90%E5%A4%8D%E5%88%B6%EF%BC%9A%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E5%9C%A8%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%BA%90%E5%90%8C%E6%AD%A5%E5%88%B0%E5%90%8C%E4%B8%80%E7%9B%AE%E6%A0%87%E5%90%8E%E5%88%A0%E9%99%A4%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%BA%90%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有两个源文件夹,我想保持同步到同一个目标文件夹中。我通常给出两个单独的命令:
rsync -auP --delete-before "/source1/" "/detination/"
rsync -auP --delete-before "/source2/" "/detination/"
但是,当给出第二个命令时,由于该选项,从中复制的文件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 副本。如果任何文件仅存在于一个中,则它将位于该目录中。缺点是仅在 treeA 中的任何文件都会不断被删除,然后在每次运行时重新复制。