使用rsync进行双向同步


11

我正在尝试使用rsync设置双向或双向同步。就我而言,从B到A同步时,我只需要删除文件。因此,我考虑两次按以下方式运行rsync:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

此解决方案的问题是,当我运行rsync(AB)后立即运行rsync(B-> A)时,在同步之间创建的任何新文件也将被删除。

有没有一种方法可以将时间戳记指定为条件,即仅在此日期/时间之前创建文件时才删除文件。

更新:

我知道有一个统一的解决方案,但是必须在两端安装统一问题。我正在与远程服务器同步,因此无法在远程端安装统一。


这里有一个非常相似的问题,还有更多答案:stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Answers:


4

您可以尝试专门用于此任务的osync。我曾经设置一个复杂的rsync命令序列来完成这项工作,但是现在我使用osync。

https://github.com/deajan/osync

它在内部使用rsync,因此它应该适合您可以使用rsync的任何情况。


1
谢谢马克。我正要回答我自己的问题。我发现了非常相似的脚本,称为bsync(github.com/dooblem/bsync),基本上它使用diff找出需要同步的内容。由于我不希望同步中有任何冲突,因此我也对该脚本进行了一些修改,以便在与cron作业一起运行时可以静默运行。
拉扎

7

rsync正是由于您遇到的原因而导致此工具错误。相反,请考虑使用unison

unison A/ B/

首次运行此命令时,它将标识唯一的文件A和唯一的文件B。它还会标记两个位置的内容,并要求您确定要覆盖的内容。

运行此下一次会复制从变化AB,也BA,标记已在这两个地方,以便手工解决被改变的任何文件。

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

有许多有用的标志,可unison通过定义假设来帮助自动化流程,从而减少同步期间询问的问题数量。


3
我看到了统一的解决方案,但是问题是我必须在两端都安装。我正在与远程同步,并且无法在远程端安装统一。
拉扎

1
它对OP没有帮助,但是我一直在寻找统一的方法。我看到有Debian软件包,它支持ssh传输。
Ted

1
有可能使用不统一的服务器上安装它,看到这个答案的评论stackoverflow.com/a/2936711这点i3vi3v.wordpress.com/2013/01/09/...
托马斯

-1

您真正需要的是Rclone。Rclone是rsync,用于云存储(框,保管箱,nextcloud,ftp等)和本地存储。


2
他们将如何安装和使用 rclone解决他们的问题?
Jeff Schaller

3
rclone还没有双向同步。
肖恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.