在 2 台计算机之间同步文件夹,使用文件系统观察器,以便每次修改文件时立即复制

Bas*_*asj 22 networking filesystems synchronization

我有:

  • 我通过 SSH 在 IP 203.0.113.0 端口 1234 上连接的 Linux 服务器

  • 一台家用电脑(在路由器后面),公共 IP 198.51.100.17,是 Debian 或 Windows+Cygwin

让文件夹/home/inprogress/ 同步(双向)最简单的方法是什么,有点像rsync,但是使用文件系统观察器,以便每次修改文件时,它都会立即复制到另一侧?(即无需手动调用同步程序)

我正在寻找命令行/无 GUI 解决方案,因为服务器是无头的。

是否有 Linux/Debian 内置解决方案?

Bas*_*asj 24

按照@Kusalananda 的评论,我终于花了几个小时来测试这个用例的Syncthing,它工作得很好。它会自动检测双方的变化,复制速度非常快。

示例:假设您正在本地使用server.py自己喜欢的记事本软件,按 CTRL+S(保存)。几秒钟后,它会自动复制到远程服务器上(没有任何弹出对话框)。

我注意到的一件好事是,您不必考虑使用 Syncthing 的家用计算机和服务器的 IP:每个“设备”(计算机、服务器、电话等)都有一个唯一的 DeviceID,如果您共享与另一个设备的 ID,它会自动找出它们应该如何相互连接。

去做:

  • 家用电脑端(Windows 或 Linux):

    使用普通的 Syncthing 浏览器内配置工具

  • VPS端:

    首先通过端口转发连接VPS:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    
    Run Code Online (Sandbox Code Playgroud)

    后一个选项会将监听端口 8384 的 VPS 的 Syncthing 网络配置工具重定向到家用计算机的端口 8385。

    然后在 VPS 上运行:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    
    Run Code Online (Sandbox Code Playgroud)

    然后在家用电脑的浏览器上,打开http://localhost:8385:这将是 VPS 的 Syncthing 配置!


我试过的其他解决方案:


我刚刚注意到的 Syncthing 的其他优点:

  • 您可以fsWatcherDelaySconfig.xmlfrom减少102秒,以便在执行 CTRL+S 后,2 秒后(+ 上传时间,即小文本文件不到 1 秒)它在另一台计算机上

  • 如果你同步同一个局域网内的两台电脑(只需给对方设备ID,不需要关心本地IP地址),它会自动注意到它不需要通过互联网传输,但它可以在当地交易。这很棒,并且允许phone <--> computer通过 WiFi 连接到同一个家用路由器的两者的同步传输速度非常快(4 MB/s!)......而它在使用 Dropbox 同步的 ADSL 上会停留在 100 KB/s !(我的 ADSL 上传速度限制为 100 KB/s)


Too*_*Tea 18

听起来Unison应该可以完成这项工作。

Unison 是 OSX、Unix 和 Windows 的文件同步工具。它允许文件和目录集合的两个副本存储在不同主机(或同一主机上的不同磁盘)上,分别修改,然后通过将每个副本中的更改传播到另一个副本来更新。

它确实有一个可选的 GUI,可以使解决冲突更容易一些,但也可以使用基于文本的用户界面来完成所有工作。您还可以预定义如何解决完全无人值守操作的冲突。

有一个文件观察器 (fsmonitor) 组件可以在需要时触发同步。在手册中搜索“repeat watch”了解详情。

如Debian看起来有正确的版本(2.48+)盒子的包装了