2011-06-28 24 views
11

我希望写在Ruby或Python的脚本,将看到一个目录的内容,并监测监视器事件,因为它们发生

1. Any new files 
2. Any saves to existing files. 

我不打扰一下什么是不同的文件 - 只是它们已被保存或是新的。

该脚本然后返回该文件的名称(使用其完整路径)或许每2秒钟一次或某事。

我想要的文件夹内扫描文件这么

mainfile.txt 
images/image1.jpg 
images/icons/icon1.png 

所有这些文件/文件夹需要进行montitored。

我最终希望FTP的文件已更改/已添加,但我很高兴解决问题的第一部分的解决方案,因为我知道如何FTP(但通过所有手段包括如果你想到!)

我使用OSX 10.5.8

回答

1

我推荐使用设计工具为你所描述的 - rsync。

rsync会为你做所有这些工作。它将检查修改或新建的文件,并对它们进行检查(并且仅通过将更改的文件块,而不是整个文件复制到目标主机来进行优化)。

rsync -a mainfile.txt images/image1.jpg images/icons/icon1.png remotehost:/directory/to/sync/files/to 

如果你也想那才会被同步在文件的列表,你可以通过添加调整的rsync的日志:

-q --log-format="%f" 

然而,即使这听起来并不很喜欢你在做什么后。这听起来像你想要一个快速复制的文件系统,而不是频繁的复制。

复制文件系统将知道即时更改已完成(毕竟您正在将它们转换为文件系统),并且可以在另一侧进行相同的更改。初始设置完成后,您不需要做任何工作。这可能是不可能的,你必须更充分地描述情况。

3

啊,看着FTP。碰巧,我为工作建立了这样的东西。虽然我正在处理一些我希望你没有的限制,但坐在Linux上的部分很简单。在这个时代的OSX是,主要是一个重新包装的linux。

因此,您应该能够安装使用inotify内核功能的iwatch。如果你不能使用iwatch本身,这将是非常令人惊讶的,因为它是用perl编写的,那么源代码应该指出你如何直接与inotify进行通信。 This link有使用python inotify的东西。

iwatch还有一些其他的选择,但他们都钩入inotify。唯一的另一种选择是在定时器上进行手动目录扫描,该定时器笨重且应该避免。我在窗户上做过,它有....问题。如果我有机会,我会重新修改该部分。

6

对于红宝石这里是宝石,它可以帮助你: https://github.com/thibaudgg/rb-fsevent

FSEvent是要在OS X上使用该系统,这是一个结合其推向红宝石,这颗宝石是用来被后卫是我怎么找到它的。 (https://github.com/guard/guard)

您甚至可以考虑使用Guard,它提供了一个很好的API来监视文件/路径并对更改执行操作。

编辑:由于我张贴这种新的宝石被释放到抽象的平台具体的东西:https://github.com/guard/listen,这种宝石提供了一个可移植的API来监控在多个平台上

2

我创建了一个基于guard红宝石宝石同步文件系统事件文件以类似Dreamweaver的方式发送到文件系统事件时的ftp。这有点年轻,但过去几周我一直在使用它,没有出现问题。

它被称为guard-ftpsync,我相信它解决了你的确切问题。