实时监控文件系统中的事件

11 投票
5 回答
3019 浏览
提问于 2025-04-16 20:26

我想写一个脚本,用Ruby或Python语言,来查看一个文件夹里的内容,并监控这些内容的变化。

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

我不在乎文件里具体有什么不同,只要知道它们被保存过或者是新文件就行。

这个脚本每隔大约2秒钟就返回一次文件的名字(包括完整路径)。

我还想扫描文件夹里的文件,所以

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

所有这些文件和文件夹都需要被监控。

最后我想把那些有变化或新添加的文件通过FTP上传,不过我现在只想解决第一部分的问题,因为我知道怎么用FTP(不过如果你愿意的话,可以把这部分也包括进来!)

我使用的是OSX 10.5.8版本。

5 个回答

2

这里有几个链接,都是关于Python库的。第一个链接指向的是一个叫做MacFSEvents的库,版本是0.2.1。这个库可以帮助你在Mac电脑上处理文件系统事件。第二个链接是pyfsevents库的0.2b1版本,它也是和文件系统事件相关的。最后一个链接是pyobjc-framework-FSEvents的2.3版本,这个库可以让你在Python中使用Mac的FSEvents功能。你可以通过这些链接去了解更多信息。

3

哦,监控FTP啊。其实我在工作中也做过类似的东西。虽然我遇到了一些你可能没有的限制,但在Linux上运行的部分还是挺简单的。现在的OSX其实大部分是重新包装过的Linux。

所以,你应该能安装iwatch,它使用了inotify这个内核功能。如果你不能直接使用iwatch,这倒是挺意外的,因为它是用perl写的,那么源代码应该能告诉你怎么直接和inotify沟通。这个链接有关于用python和inotify一起使用的内容。

除了iwatch,还有一些其他的替代方案,但它们都是依赖于inotify的。唯一的其他选择就是定时手动扫描目录,这样做很麻烦,应该尽量避免。我在Windows上做过这个,结果是……有很多问题。如果有机会的话,我会重新处理那部分。

6

对于Ruby来说,这里有一个可以帮助你的工具:https://github.com/thibaudgg/rb-fsevent

FSEvent是你在OS X上想要使用的系统,这个工具可以把它带到Ruby中。这个工具是Guard使用的,所以我才找到它的。(https://github.com/guard/guard)

你甚至可以考虑使用Guard,它提供了一个很不错的接口,可以监控文件或路径,并在发生变化时执行操作。

补充:自从我发这个之后,又发布了一个新的工具,可以处理平台特定的内容:https://github.com/guard/listen,这个工具提供了一个跨平台的接口,可以在多个平台上监控文件系统事件。

撰写回答