2010-05-29 168 views
78

我有一个文件夹a /和一个远程文件夹A /。 我现在在一个Makefile运行是这样的:双向同步rsync

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. 家庭服务器

因此,有时,服务器将有一个用笔记本电脑中删除的文件同步,例如,然后,当我运行与我的桌面同步(删除的服务器文件仍然存在)我想这些文件被删除,而不是被复制到服务器。

我想这是唯一可能与操作的数据库和追踪:P

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

+1

我有这个相同的问题。你有没有找到解决方案,mwm? – mouche 2011-02-12 23:53:03

+2

不幸的是,没有。 – mwm 2011-02-15 19:46:16

+7

我其实现在做了。我试图实现一个类似经验的Dropbox,并提出了一个涉及统一(使用rsync)和lsyncd来监视文件更改的解决方案。我还发现这个解决方案的其他人和更多的技巧»»http://www.cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu/ – mwm 2011-04-26 01:56:35

回答

54

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

语法: unison dirA/ dirB/

齐奏问什么,当文件是不同的事,但你可以通过使用接受默认设置(不冲突)选项下自动执行的过程:

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/根本没有问题,并写入输出多少文件w (因为它们相互冲突)。

+0

顺便说一句,如果你认为,那你仅限于rsync,因为你没有足够的权限安装统一 - [你仍然可以使用前缀一致安装](http://i3vi3v.wordpress.com/2013/01/09/zend-studio-syncing -files-with-remote-server-using-unison /)。 – Igor 2013-01-18 08:15:13

+6

Unison非常易于使用小目录。但对于有大量文件的目录来说,这是极其令人沮丧的。在rsync几乎马上就要开始复制的地方,统一有时需要12个多小时才能开始复制,因为它在复制任何内容之前扫描每个文件。 – 2014-06-16 22:25:32

+1

git good at this?至少git易于使用,并且传输速度很快。对于blob,有一个由github开发的名为[Large File Storage]的扩展(https://git-lfs.github.com)。 – wener 2015-06-03 08:58:33

0

我不知道是否有两个同步,但对于--delete工作的人,你还需要添加--recursive参数也是如此。

+0

选项'--recurse'的短等价物是'-r',OP_is_正在使用(嵌入在压缩选项组“-avzru”中)。 – mklement0 2014-06-07 00:04:52

5

试试这个,

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(使用Cygwin与安装的rsync软件包)和FreeNAS文件服务器(FreeNAS在预装rsync软件包的FreeBSD上运行)之间进行双向同步。

+3

这不会删除新的本地文件吗? '-u'跳过目标文件较新的文件,但rsync没有跟踪删除年龄的方法,所以这个脚本怎么能区分当本地文件是新的(应该保留)还是旧的(和应该删除)?或者我误解了? – Matthematics 2013-08-26 19:08:31

+0

'--delete-excluded'是否删除目标目录中但不包含源目录的文件?我以为你必须定义'--exclude = '所以rsync只会删除这些排除?或者rsync将所有非源目录文件视为“排除”? – 2013-09-17 04:12:18

+2

找到了答案: 除了删除接收方不在发送方的文件外,这也告诉rsync同时删除接收方排除的任何文件(请参阅--exclude) http:// rsync.samba.org/ftp/rsync/rsync.html – 2013-09-17 04:53:42

5

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

3

由于原来的问题还涉及到台式机和笔记本电脑,例如涉及音乐文件(因此他可能使用GUI),我想也提到最好的双向,多平台之一,自由和开放源码程序迄今为止:FreeFileSync

它基于GUI,非常快速和直观,带有过滤和许多其他选项,包括远程连接,查看和交互式管理“冲突”(例如,具有类似时间戳的文件)的能力,以及在双向转让,镜像等。