以跨平台方式观察文件系统和 rsync 变化,并尽量减少依赖

以跨平台方式观察文件系统和 rsync 变化,并尽量减少依赖

我想启动一个长时间运行的 Ruby 或 Python 脚本,并让该脚本监视本地目录中文件的更改和新文件。该脚本会定期触发与远程网络位置的单向 rsync。

这必须在 Linux(Ubuntu 13.10+)和 Windows(Windows 7+)环境中运行。重要的是,我想尽量减少所需的依赖项数量,并且我想通过简单地将一些文件放在目录中来在每个系统上安装相同的东西——没有安装程序。

有没有可能不使用安装程序就能得到我想要的系统?如果可以,该怎么做?

答案1

过去,当我从 Windows 平台向任何其他支持 sshd 或 sftp 的系统执行此操作时,我使用温SCP具有非常完善的同步功能。WinSCP 还可以从命令行执行,以监视本地目录并通过 SCP 或 SFTP 协议自动将文件推送和/或拉取到远程文件系统。

WinSCP 解决方案非常强大且高度可配置,但它是为 Windows 编写的。

我已经使用 32 位 wine 将 WinSCP 安装在我的 Linux 机器上,并且运行良好,尽管我还没有尝试在 Linux 上运行 CLI 同步功能。我相信,一旦我有时间专注于此,我很快就会让 CLI 在 Linux 上运行。

[更新] WinSCP 的一个缺点是它不能很好地处理符号链接。在我的用例中,我希望它忽略符号链接目录,但将符号链接文件作为实际文件发送,但一旦文件存在于远程系统上,WinSCP 同步功能就会忽略它们。

答案2

作为问题第一部分的可能解决方案,您应该查看inotify 工具,其中包含工具通知等待它监视目录(或递归的目录集)并输出更改通知(这些可以限制为某些事件类型,例如文件创建、删除、修改等)。更多信息可以在手册页

我不熟悉在 Windows 机器上编程(python 或其他),但有一个适用于 Windows 的 inotifywait 端口,形式为inotify-win在生成可执行文件之后,你可以通过以下脚本运行它:子进程与 Linux 版本相比,平台特定的变化很小。

对于问题的第二部分,你可以使用 SFTP波拉米科然而,似乎对加密从 Windows 的角度来看,可能会使这个选项有点困难。

我意识到这并不能完整地回答你的所有问题,但希望这里有一些对你有用的东西。

答案3

我听说过https://pypi.python.org/pypi/watchdog- 一个用于监控文件系统事件的 Python 库,可在 Linux、OSX、FreeBSD 和 Windows 上运行。

我会使用像 bbfreeze 或 pyinstaller 这样的程序将整个工具打包成适用于不同平台的二进制文件。rsync 已经为大多数系统提供了安装程序。

答案4

如果你要用 Python 构建自定义脚本,我会考虑使用异步SSH。异步特性有助于制作非常快速的工具,并且它具有安全访问远程系统所需的所有功能。

唯一的限制是远程系统需要一个 SSH 守护进程,但现在这变得越来越容易,而且我听说最新的 Windows 甚至有一个开箱即用的 SSH 守护进程。

我目前还不确定是否要自己构建这样的工具。

相关内容