102

我有一个文件夹 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 选项来帮助完成我想要的,但事实是,它不适用于 2-way-sync。

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

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

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

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

我想这只有通过数据库和操作跟踪才有可能:P

有更简单的解决方案吗?谢谢你。

4

11 回答 11

66

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

句法:

unison dirA/ dirB/

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

unison -auto dirA/ dirB/

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

注意:我不再使用 Unison(我使用 NextCloud,它没有解决原始用例)。但是,请注意,rsync不是为双向同步而设计的,whileunison是。unison可能有它的错误(就像任何其他软件一样)和它的皱纹。我很惊讶它现在似乎得到了积极的维护(上次我看起来我认为我认为它看起来已经死了),但我不确定现在的状态是什么。我不需要双向文件同步器,因此可能有更好的选择。

于 2010-05-29T21:50:22.713 回答
9

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

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

FreeFileSync 可以轻松同步同一网络上的两台计算机,也可以同步不同和远程网络上的两台计算机。

  • 在同一网络上:让 FreeFileSync 在一侧使用本地文件系统,在另一侧使用共享网络驱动器/路径。在 Windows 系统上,您可以在一台计算机上启用文件/磁盘共享并从另一台计算机访问该共享。我以这种方式使用 FreeFileSync 来保持我的主要开发 PC 源代码与我的 2 台笔记本电脑同步。我还将其中一台笔记本电脑与安装了 Samba 并共享其中一个目录的 Linux 服务器同步。
  • 跨网络:创建一个 VPN 并执行与上述相同的操作。FreeFileSync 将看到远程磁盘,就像它在本地网络上一样。或者购买一台路由器,让您可以将 USB 磁盘连接到它并通过 Internet 共享。我在远程 Linux 服务器上安装了 VPN,并通过 OpenVPN Windows 客户端使用它。
于 2014-03-13T09:41:12.963 回答
8

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

于 2012-01-01T06:30:32.117 回答
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(使用 cygwin 并安装了 rsync 包)和 FreeNAS 文件服务器(FreeNAS 在 FreeBSD 上运行并预装了 rsync 包)之间进行双向同步。

于 2012-06-02T00:57:34.730 回答
5

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

于 2013-08-18T14:44:14.943 回答
3

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

于 2013-02-01T09:34:12.020 回答
1

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

适用于mac、linux和windows。

于 2016-09-30T17:22:03.533 回答
1

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

于 2021-04-30T23:03:45.143 回答
0

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

于 2012-03-21T22:31:20.273 回答
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
于 2020-05-20T21:59:13.037 回答
-1

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

于 2019-02-19T08:38:14.167 回答