双向同步rsync
我有一个文件夹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台机器:
- 桌面
- 笔记本
- 家庭服务器
因此,有时,服务器将有文件被删除与笔记本同步,例如,然后,当我运行与我的桌面同步(删除的服务器文件仍然存在),我希望这些文件被删除,而不是再次复制到服务器。
我想这只能用数据库和操作跟踪:P
任何简单的解决scheme? 谢谢。
试试Unison: http : //www.cis.upenn.edu/~bcpierce/unison/
语法: unison dirA/ dirB/
Unison要求在文件不同时要做什么,但是可以通过使用以下接受默认(非冲突)选项来自动执行该过程:
unison -auto dirA/ dirB/
unison -batch dirA/ dirB/
根本不询问任何问题,并写入输出有多less文件被忽略(因为它们是冲突的)。
你也可以试试bitpocket: https : //github.com/sickill/bitpocket
尝试这个,
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
我只是testing这个,它为我工作。 我正在Windows7(使用Cygwin与rsync软件包安装)和FreeNAS文件服务器(FreeNAS在预装rsync软件包的FreeBSD上运行)之间进行双向同步。
您可以使用Osync: http : //www.netpower.fr/osync ,它是基于智能删除传播的rsync。 它也有多个选项,如恢复暂停执行,软删除和时间控制。
你可以试试csync ,它是自己云端引擎下的同步引擎。
由于原来的问题还涉及桌面和笔记本电脑以及涉及音乐文件的示例(因此他可能使用GUI),我还提到迄今为止最好的双向,多平台,免费和开放源代码程序之一: FreeFileSync 。
这是基于GUI的,非常快速和直观,带有过滤和许多其他选项,包括远程连接的能力,查看和交互式pipe理“冲突”(例如,具有类似时间戳的文件),并在双向传输,镜像和等等。
我现在使用SparkleShare https://www.sparkleshare.org/
适用于Mac,Linux和Windows。
我不确定它是否适用于两个同步,但是对于–delete工作,您还需要添加–recursive参数。