file - 使用 rsync 进行双向同步

标签 file synchronization rsync two-way

我有一个文件夹 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 台机器:

  1. 桌面
  2. 笔记本
  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/

相关文章:

java - 如果只有一个writer线程并且没有对map进行结构修改,我们是否需要同步java HashMap gets

python - 在python中监控线程同步

linux - 为什么CentOS 7.2无法安装最新版本的rsync?

java - 在java中读取文件时得到相同的内容

javascript - 谷歌浏览器同步API?

command-line - 不要在 rsync 输出中显示目录

ssh - 如何允许一台服务器上的用户 "postgres"rsync 到另一台服务器?

c - sprintf() 的使用以及 gdb 报告程序提前脱离循环?

java - 读取文件到最后

linux - grep 日志文件仅用于 X 个具有特殊值(value)的最新条目