在Mac OSX机器和Linux机器之间自动同步目录/文件修改的脚本



我的Mac上有一些源代码,为了进行测试,我有兴趣将其与包含与生产环境相似的web服务器设置的VM同步。因此,我需要能够在每次有更改时自动将文件复制到VM。

我知道我可以使用rsync在脚本运行时手动执行此操作,但我需要一些方法让它在后台运行,每次在特定目录或其子目录中的文件被修改。

我知道Linux机器上存在inotifywait,可以解决这个问题。我还阅读了FSEvents API和kqueue。然而,这些似乎都不能从命令行访问,我真的不想花很长时间做一些事情来做这个…

我想我可以使用cronjob,但是一分钟是相当长的时间来等待看到一个网站的变化…

任何想法?

我一直这样做,在Windows/Linux/Mac工作站上开发,并将更改保存到远程Linux服务器,在那里它们立即返回到我工作站的浏览器进行测试。您有几个选项:

  1. 您可以在本地挂载远程文件(如通过sshfs)并直接对它们进行更改。例如,你的Mac认为文件是本地的,所以你可以用你的GUI编辑器编辑它们,但是当你File->Save时,它实际上是远程保存文件。这样做的主要缺点是当您与服务器断开连接时无法工作。

  2. 远程挂载本地文件。这将允许您在断开连接时在本地工作,但不允许测试站点在断开连接时工作——这可能不是什么大问题。如果您在远程服务器上没有正确的工具/访问权限,则此选项可能无法执行。

  3. (我喜欢)。使用NetBeans IDE,它有一个非常好的"复制到远程"特性。您在本地维护所有文件的完整副本,并直接编辑它们。当你在一个文件上点击File->Save, NetBeans会将它保存在本地透明地scp/ftp到你的远程服务器。

使用像gitmercurial这样的DVCS,让本地的repo运行提交后的钩子来运行rsync,然后再运行测试本身怎么样?

我有点困惑,为什么你不能从运行测试的同一脚本运行rsync。如果你运行rsync -e ssh,你可以在VM和Mac之间设置自动公钥认证。在这种情况下,rsync不会有任何手动操作。

对于一个简单的设置,您可能能够设置一个启动代理来做您想做的事情。请参阅这个问题和启动的手册页。关于启动的WatchPath键的更多信息。但是看起来WatchPath可能不工作在子目录内的变化

相关内容

  • 没有找到相关文章

最新更新