关于linux:RSync:如何在两个方向同步?

RSync: How do I synchronize in both directions?

我想使用rsync在两个方向上同步两个目录。

我指的是古典意义上的同步(在rsync手册中不是这个意思):我想更新两个方向的目录,取决于哪一个是新的。

这可以通过rsync完成吗(最好是Linux方式)?如果没有,还有什么其他解决方案?


只需运行它两次,使用"更新"模式(-u或--update标志)加上-t(复制文件修改时间)、-r(递归文件夹)和-v(详细输出查看它在做什么):

1
2
rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

这不会处理删除,但我不确定是否有一个好的解决方案来解决只进行周期同步的问题。


你知道Unison文件同步器吗?

Unison is a file-synchronization tool
for Unix and Windows. It allows two
replicas of a collection of files and
directories to be stored on different
hosts (or different disks on the same
host), modified separately, and then
brought up to date by propagating the
changes in each replica to the other. ...

还要注意,它对故障具有弹性:

Unison is resilient to failure. It is
careful to leave the replicas and its
own private structures in a sensible
state at all times, even in case of
abnormal termination or communication failures.


感谢JIVIEW

1
rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

这将导致第二次同步在第一次同步结束后立即发生。如果目录结构很大,这将节省时间,因为人们不需要坐在PC前。如果结构很大,请删除冗长和进度的内容。

1
rsync -ur dir_a dir_b && rsync -ur dir_b dir_a


使用rsync [hostname:]source-dir [hostname:]dest-dir

例如:

1
rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

将XXX文件同步到不同的/XXX文件。如果不存在不同的/XXX文件,它将创建它-即复制它。

-pogtEtv—只是保留文件元数据的一系列选项,加上v-verbose和r-recursive

--progress-显示实时同步的进度-如果您复制大文件,则非常有用

--bwlimit=2000—设置复制/同步的最大速度(bw=带宽)

当您在网络上工作时,p.s.rsync非常重要。对于本地计算机,您可以使用诸如cp之类的命令。

祝你好运!


你需要的是RCLONE。rclone("rsync for cloud storage")是一个命令行Linux程序,用于与不同的云存储提供商(box、dropbox、ftp等)和本地文件系统同步文件和目录。RLONE仅支持镜像同步。

另一个更图形化的解决方案是使用freefilesync,它包括程序realtimesync。freefilesync支持双向同步,包括处理删除。

FreFileSync gui


我用的是rsyncinotifywait。当您更改任何文件时,将执行rsync

1
inotifywait -m --exclude"$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format"%w%f""$folder"

您需要在两台主机上运行inotifywait。请检查示例