使用 rsync 进行双向同步

使用 rsync 进行双向同步

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

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

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

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

更新:

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

答案1

rsync是执行此任务的错误工具,其原因正是您所遇到的。相反,请考虑使用unison:

unison A/ B/

第一次运行此命令时,它将识别 中唯一的文件A以及B.它还会标记位于两个位置的内容,并要求您确定要覆盖哪个。

下次运行此命令时,它会将更改复制到A和,BB标记A在这两个位置已更改的任何文件以供手动解决。

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通过定义假设来帮助自动化该过程,从而减少同步期间询问的问题数量。

答案2

您可以尝试 osync,它正是专为此任务而设计的。我曾经设置了一系列复杂的 rsync 命令来完成这项工作,但我现在使用 osync。

https://github.com/deajan/osync

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

答案3

你真正需要的是克隆。 Rclone 是用于云存储(box、dropbox、nextcloud、ftp 等)和本地存储的 rsync。

相关内容