双向同步rsync

时间:2010-05-29 21:16:36

标签: file sync rsync two-way

我有一个文件夹a /和一个远程文件夹A /。 我现在在Makefile上运行这样的东西:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

当我制作同步音乐时,它首先获取从服务器到本地的所有差异,然后相反,将所有差异从本地发送到服务器。

只有在将来只有更新或新文件时才能很好地工作。如果有删除,则不执行任何操作。

在rsync中有--delete和--delete-after选项来帮助实现我想要的东西,但事情是,它不适用于双向同步。

如果我想删除syn上的服务器文件,当本地文件被删除时,它可以工作,但如果由于某种原因(后面解释)我有一些不在服务器但在本地存在的文件被删除了,我想在本地删除它们而不是服务器复制(当它发生)。

我在上下文中有3台机器:

  1. 桌面
  2. 笔记本
  3. 家庭服务器
  4. 因此,有时,服务器将包含使用笔记本同步删除的文件,然后,当我与我的桌面运行同步时(删除的服务器文件仍然存在)我希望删除这些文件,不要再被复制到服务器。

    我想这只能用于数据库和操作跟踪:P

    任何更简单的解决方案? 谢谢。

11 个答案:

答案 0 :(得分:58)

尝试Unison:http://www.cis.upenn.edu/~bcpierce/unison/

语法: unison dirA/ dirB/

Unison询问文件不同时该怎么做,但您可以使用以下接受默认(非冲突)选项的以下内容自动执行该过程:

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/根本不问任何问题,并写入输出忽略了多少文件(因为它们有冲突)。

答案 1 :(得分:8)

你也可以试试bitpocket:https://github.com/sickill/bitpocket

答案 2 :(得分:6)

试试这个,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

我只是测试一下这对我有用。我正在Windows7之间进行双向同步(使用安装了rsync软件包的cygwin)和FreeNAS文件服务器(FreeNAS在预装了rsync软件包的FreeBSD上运行)。

答案 3 :(得分:5)

您可以使用Osync:http://www.netpower.fr/osync,这是基于智能删除传播的rsync。它还有多个选项,例如恢复暂停执行,软删除和时间控制。

答案 4 :(得分:4)

由于原始问题还涉及桌面和笔记本电脑以及涉及音乐文件的示例(因此他可能使用GUI),我还提到了最好的双向,多平台之一,迄今为止的免费和开源程序:FreeFileSync

它基于GUI,非常快速和直观,带有过滤和许多其他选项,包括远程连接,查看和交互式管理"碰撞" (例如,具有相似时间戳的文件)并在双向传输,镜像等之间切换。

答案 5 :(得分:3)

您可以尝试csync,它是owncloud引擎盖下的同步引擎。

答案 6 :(得分:1)

我现在正在使用SparkleShare https://www.sparkleshare.org/

适用于mac,linux和windows。

答案 7 :(得分:1)

我很惊讶还没有人提到 Syncthing。我多年来一直使用它来同步我的手机、平板电脑和两台笔记本电脑。有一次,我还使用它向大约 600 公里外的家人发送 10 GB 的照片,从我的机器直接发送到他们的机器,而且速度非常快(尽管数据通过 Syncthing 的发现服务器路由以解决 NAT 问题)。我也曾在某个时候尝试过 OwnCloud/NextCloud,但 Syncthing 更可靠,而且速度也更快。

答案 8 :(得分:0)

我不确定它是否适用于两个同步,但是对于--delete工作,您还需要添加--recursive参数。

答案 9 :(得分:0)

Rclone是您要寻找的。 Rclone(“用于云存储的rsync”)是一个命令行程序,用于与不同的云存储提供程序(包括本地文件系统)之间来回同步文件和目录。 Rclone以前称为Swiftsync,自2013年以来一直可用。

答案 10 :(得分:0)

您可以使用cloudsync使文件夹与遥控器保持同步:

pip install cloudsync
pip install cloudsync-gdrive
cloudsync sync file:c:/users/me/documents gdrive:/mydocs

如果远程服务器是NFS,则可以使用:

cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs