我有一个文件夹 a/和一个远程文件夹 A/。 我现在在 Makefile 上运行类似的内容:
get-music:
rsync -avzru server:/media/10001/music/ /media/Incoming/music/
put-music:
rsync -avzru /media/Incoming/music/ server:/media/10001/music/
sync-music: get-music put-music
当我制作同步音乐时,它首先获取从服务器到本地的所有差异,然后相反,将所有差异从本地发送到服务器。
仅当将来有更新或新文件时,此方法才非常有效。如果有删除,则不会执行任何操作。
在 rsync 中,有 --delete 和 --delete-after 选项可以帮助完成我想要的任务,但事实是,它不适用于 2 路同步。
如果我想删除syn上的服务器文件,当本地文件被删除时,它可以工作,但是如果由于某种原因(稍后解释)我有一些文件不在服务器中但存在于本地并且它们被删除,我想在本地删除它们而不是服务器复制(正如它所发生的那样)。
事情是我在上下文中有 3 台机器:
- 桌面
- 笔记本
- 家庭服务器
因此,有时,服务器会有通过笔记本同步删除的文件,例如,当我与桌面(已删除的服务器文件仍然存在)运行同步时,我希望删除这些文件,并且不会再次复制到服务器。
我想这只有通过数据库和操作跟踪才能实现:P
还有更简单的解决方案吗? 谢谢。
最佳答案
尝试齐奏:http://www.cis.upenn.edu/~bcpierce/unison/
语法:
unison dirA/ dirB/
Unison 会询问当文件不同时该怎么做,但您可以使用以下接受默认(不冲突)选项的命令来自动化该过程:
unison -auto dirA/dirB/
unison -batch dirA/dirB/
根本不问任何问题,并写入输出有多少文件被忽略(因为它们存在冲突)。
注意:我不再使用 Unison(我使用 NextCloud,它不能解决原始用例)。但请注意,rsync
并非专为双向同步而设计,而 unison
则适用。 unison
可能有其缺陷(与任何其他软件一样)和缺陷。我很惊讶它现在似乎得到了积极的维护(上次我看的时候我想我认为它看起来已经死了),但我不确定现在的状态如何。我不需要双向文件同步器,因此可能有更好的选择。
注2:我现在正在使用Mutagen出于某些目的。它仍然没有完全涵盖问题的用例,但它确实实现了双向同步。
关于file - 使用 rsync 进行双向同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936627/