双向同步rsync

mwm*_*mwm 92 rsync sync file 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
Run Code Online (Sandbox Code Playgroud)

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

只有在将来只有更新或新文件时,这才能很好地工作.如果有删除,它什么都不做.

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

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

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

  1. 桌面
  2. 笔记本
  3. 家庭服务器

因此,有时,服务器将具有使用笔记本同步删除的文件,例如然后,当我与我的桌面运行同步时(删除的服务器文件仍然存在)我希望删除这些文件而不是再次复制到服务器.

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

更简单的解决方案?谢谢.

ale*_*lex 61

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

句法: unison dirA/ dirB/

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

unison -auto dirA/ dirB/

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

  • Unison很容易用于小目录.但对于拥有大量文件的目录来说,这是极其缓慢的.rsync几乎会立即开始复制,unison有时需要12个多小时才能开始复制,因为它会在复制任何内容之前扫描每个文件. (7认同)
  • 齐声很棒 - 但也很不可靠。在我的大约 50% 的用例中,它的简单没有奏效。最常见的原因是版本间能力差。我有时会与我没有权限的计算机上的内容同步。如果该服务器的版本与我的版本不同,则统一失败。此外,我最近在同一版本的一致客户端之间失败了,因为他们使用了某些库的不同编译版本(这是在 ubuntu 计算机和树莓派之间)。 (4认同)
  • @wener不要用锤子做螺丝,也不要用螺丝刀钉钉子.`:)` (3认同)
  • 如果您正在同步音乐库,您关心 2 向文件删除但不关心文件内容冲突,则可以使用 Unison `-fastercheckUNSAFE` 标志来显着加快 Unison 速度。它不会计算文件内容哈希,而只是查看时间戳/长度并覆盖(如果较新)。请参阅[手册](http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html) (3认同)

bal*_*alu 9

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


sai*_*aif 8

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


小智 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
Run Code Online (Sandbox Code Playgroud)

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

  • @Lübnah:正确; 这个解决方案不是一个完整的双向sync_:因为带有`--delete-excluded`的rsync与_server_一起作为_source_运行:在该运行期间,文件_added local_将被_deleted_(而添加到_server_ _are_的文件被复制到当地的目标).同步回服务器的唯一本地文件是_也存在于server_上并且在本地_修改的文件_(最近比服务器版本更新) - 这在OP的情况下是不可能的.正如您所暗示的那样,使用`rsync`无法实现真正​​的双向同步,因为需要在运行之间保存状态. (9认同)
  • 这不会删除新的本地文件吗?`-u`在目的地上跳过较新的文件,但是rsync没有办法跟踪删除的时间,所以这个脚本如何区分本地文件是新的(应该保留)还是旧的(和应删除)?还是我误会了? (3认同)
  • 找到答案:除了删除接收端上不在发送端的文件之外,这还告诉rsync还删除接收端上被排除的任何文件(请参阅--exclude)http://rsync.samba .ORG/FTP/rsync的/ rsync.html (2认同)
  • 根据我的理解,如果我在目标上创建文件然后执行rsync命令从源复制到目标,它将删除目标文件,因为没有使用时间戳.这不是你想要的吗? (2认同)

Ors*_*ong 5

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


Dar*_*lli 5

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

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