我的src
文件夹是我的本地笔记本电脑。
我有一个dest
用于备份的文件夹(并且已安装 NAS),但由于历史原因,我有时将该dest
文件夹用于我现在所使用的用途src
(请耐心等待)。
结果是我有例如
src/docs/2021/january.pdf
尽管
dest/docs/2021/february.pdf
我刚好跑了一下rsync -av src/ dest
,现在的结果是
src/docs/2021/january.pdf
src/docs/2021/february.pdf
dest/docs/2021/february.pdf
但我想要实现的是两者完全同步,这样两者都拥有一月和二月的文件(换句话说,这些dest
文件也同步到src
)。
我怎么做?
答案1
您必须执行两次 rsync,每个方向一次。
答案2
rsync
除非您能保证永不删除任何文件,否则您不能在这种情况下使用。
考虑两棵树,A
和B
。
- 将所有文件从 A 复制到 B(同步)。我们不能删除 中的任何内容,
B
因为它可能是需要复制到 的文件A
。 - 将 B 中的所有文件复制到 A(以另一种方式同步)。我们仍然无法删除 中的任何内容,
A
因为它可能是刚刚创建的,需要复制回B
。
现在A
和是同步的,其中现在B
的所有内容都包含在 中的副本,而现在的所有内容都包含在 中的副本。A
B
B
A
假设您要从 中删除一个文件A
。现在重复同步,您会注意到已删除的文件已重新出现在 中A
。这是因为它仍存在于 中B
,并被复制过来,就像它是一个新文件一样。
解决这个问题的一个方法是使用不同的工具。我用过unison
(还https://www.cis.upenn.edu/~bcpierce/unison/),它是作为双向同步工具创建的。(还有一些其他工具,但我记不清了。)
同步两棵树A
,B
就像用这个命令一样简单
unison A B
有一些选项可用于确定当双方更新同一个文件时如何采取行动等等。