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

时间:2009-10-21 17:28:26

标签: linux rsync

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

我指的是传统意义上的同步 (在rsync手册中的含义):
我想更新两个方向的目录, 取决于哪些更新

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

8 个答案:

答案 0 :(得分:58)

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

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

这不会处理删除,但我不确定只有定期同步才能解决这个问题。

答案 1 :(得分:53)

您知道Unison File Synchronizer吗?

  

Unison是一个文件同步工具   适用于Unix和Windows。它允许两个   文件集合的复制品   要存储在不同的目录   主机(或同一个不同的磁盘)   主机),单独修改,然后   通过传播来提升最新动态   每个副本更改为另一个副本。 ...

另请注意,它对失败具有弹性:

  

Unison可以抵御失败。它是   小心翼翼地留下复制品及其复制品   一个明智的私人结构   始终处于状态,即使是在   异常终止或通信失败。

答案 2 :(得分:6)

谢谢jsight

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

这将导致第一次同步结束后立即发生第二次同步。如果目录结构很大,这将节省时间,因为不需要坐在电脑前。如果结构很大,请删除详细和进度

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

答案 3 :(得分:1)

使用rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

例如:

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 等命令。

祝你好运!

答案 4 :(得分:0)

我将rsyncinotifywait一起使用。 更改任何文件时,将执行rsync

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

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

答案 5 :(得分:0)

您需要的是Rclone。 Rclone(“用于云存储的rsync”)是一个命令行Linux程序,用于将文件和目录与不同的云存储提供程序(box,dropbox,ftp等)和本地文件系统之间进行同步。 Rlone仅支持镜像同步。

另一种包含实时同步的图形解决方案将使用FreeFileSync,其中包括程序RealTimeSync。 FreefileSync支持双向双向同步,包括处理删除。

FreFileSync gui

答案 6 :(得分:0)

为此,您需要运行rsync两次,我建议使用-a来运行它:

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a(代表存档)是-rlptgoD的快捷方式:

  • -r递归到子目录
  • -l还会同步符号链接
  • -p还同步文件权限
  • -t还会同步文件修改时间
  • -g也同步文件组
  • -o还要同步文件所有者
  • -D还同步特殊(非常规/元)文件

基本上,每当您想使用rsync创建相同的一对一副本时,都应始终使用-a,因为这是大多数用户在谈论“ 同步”时希望发生的事情”。这里的其他答案似乎忽略了某些情况,有时文件的内容保持不变,但文件所有者可能已更改,或者其访问权限可能已更改,在这种情况下,rsync不会同步文件,这可能是致命的。

但是您还需要-u,因为这样可以告诉rsync完全保留任何文件/文件夹,以防文件/文件夹已存在于目标位置并且具有较新的上次修改日期。如果没有-arsync将会同步regardless if a file/folder is newer or not

请注意,此解决方案无法处理已删除的文件。考虑到以下情况,处理删除操作不容易:在源处已删除文件,现在rsync如何知道该文件是否曾经存在并已被删除(在这种情况下,必须在目标位置将其删除)以及是否在源头不存在(在这种情况下,必须从目标端复制)。这两种情况看上去与rsync相同,因此它不知道如何正确做出反应。反过来同步也无济于事,因为这可能导致相同的情况:文件位于源位置,而不位于目标位置。为什么?它是永远不会存在于目的地还是已被删除?两种情况看起来都与rsync相同。

能够可靠地同步已删除文件的同步工具通常会管理有关所有过去同步操作的同步日志。如果该日志显示曾经有一个文件已被同步,但是现在丢失了,则很明显它已被删除。如果根据日志从未出现过这样的文件,则必须对其进行同步。通过存储所有带有时间戳的日志条目,删除的文件甚至有可能返回并被删除多次,而同步工具将始终知道该怎么做,并且结果总是正确的。 rsync没有这样的日志,它仅取决于操作两侧的当前文件状态。

答案 7 :(得分:0)

我遇到了同样的问题,最终使用了git。这可能不适合您的情况,但是如果有人找到此主题并有相同的问题,则可以考虑使用版本控制系统。