我正在尝试使用 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
和,B
并B
标记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。