Linux:连续同步文件,一种方式

sto*_*vik 71 linux ssh scp winscp

场景:在 Linux 桌面框上设置 IDE,在本地编辑 PHP 文件。每次保存文件时,我都希望此更改出现在运行 Apache 的 linux 服务器上。服务器有 ssh(以及 samba 和 nfs)。

作为参考,当我在 Windows 上编辑文件时,我终于找到了 WinSCP 作为我需要的确切工具 - WinSCP 仅提供此功能,具有初始同步然后持续更新,使用文件系统监视服务:“将远程目录保持到日期”。

在 Linux 上,人们可能会争辩说可以使用 sshfs 来完全避免同步的需要。在 Windows 上,一个 samba-share 会做同样的事情。但是,我希望 IDE 可以使用本地文件(在 SSD 磁盘上!),而不必通过网络进行 PHP 索引和诸如此类的事情,这需要很长时间。

但是 sshfs 可能仍然是解决方案的一部分 - 因此只需要在两个本地目录之间完成连续同步。

任何想法或指示?

Mic*_*jer 61

您也可以inotifywait从 inotify-tools 包中使用。

inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
    echo need to rsync $MODFILE ...
done
Run Code Online (Sandbox Code Playgroud)

  • 在 [inotify-tools 网站](https://github.com/rvoicilas/inotify-tools/wiki/) 上,有一个使用 inotify-wait 触发 rsync 的很好的例子。 (14认同)
  • @Flash是的,您可以使用[SSH多路复用](https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing)来保持套接字打开。 (2认同)

jch*_*oui 35

Lsyncd将是一个很好的解决方案。

Lsyncd 监视本地目录树事件监视器接口(inotify 或 fsevents)。它聚合和组合事件几秒钟,然后生成一个(或多个)进程以同步更改。默认情况下,这是 rsync。因此,Lsyncd 是一种轻量级的实时镜像解决方案,安装相对容易,不需要新的文件系统或块设备,并且不会影响本地文件系统的性能。

最重要的是,它使用与其他答案建议的相同类型的工具(inotify 和 rsync)来完成这项工作,但对于不熟悉 shell 脚本的人来说,设置起来更容易。

  • 当心:这个程序有一些有问题的功能。在撰写本文时: 1. 默认情况下,它会删除源中不存在的远程文件。2. "remote:" 指的是 "remote:/" 而不是 home 文件夹。3. 它守护进程,所以你不知道发生了什么。4. 它不会立即遵守 TERM 信号。 (7认同)

小智 32

我非常需要这个,因为我的代码需要在远程机器上运行,而我在本地机器上编写代码。我找到了一个不错的工具,您可以使用它来持续监控本地文件夹并将它们同步到远程或本地文件夹:https : //github.com/axkibe/lsyncd

通过 ssh 将本地目录与远程机器持续同步的简单命令是:

lsyncd -log all -nodaemon -rsyncssh <local_path> <user>@<ip> <remote_path>
Run Code Online (Sandbox Code Playgroud)

就像任何其他 rsync 命令一样,请确保在运行命令之前提供正确的文件夹路径并检查。我几乎杀死了我的一台远程机器,因为我错过了提供正确的目标目录。确保不要错过远程路径并且不要使用“/”,除非您知道自己在做什么。