跨平台(Linux / OS X)文件系统观察程序(文件更改时运行命令)

时间:2011-09-14 21:00:40

标签: shell unix

我正在寻找一个跨平台(Linux和OS X)文件系统观察程序,它不会轮询磁盘以进行更改(或者这样做非常有效)。

这将是持续集成服务器的核心部分,并处理诸如编译LESS / SCSS,运行javascript测试和运行自定义脚本等内容。我想指定一个文件和目录列表,以及在文件或文件夹发生变化时执行的命令。

我想要一些node.js,python,shell脚本或基于ruby的东西。

到目前为止我看过的一些工具......

https://github.com/tafa/node-watch-tree

https://github.com/mikeal/watch/blob/master/main.js

doc.qt.nokia.com/latest/qfilesystemwatcher.html

buildr.apache.org/building.html#continuous-compilation

www.javascriptkata.com/2010/10/28/ready-js-prepare-your-javascript-for-production /

任何建议表示赞赏。

7 个答案:

答案 0 :(得分:4)

除了用C语言编写外,entr看起来就像你想要的那样。

答案 1 :(得分:1)

跨平台?这很难。我不知道任何有效的跨平台实施,但也许,我可以提出一个起点。

Linux拥有iNotify API,这是一项监控文件系统的内核功能,可立即向相关事件发出警报。 BSD / Mac-OS等效项为kqueue。这两个API看起来非常相似。

我在CPAN找到了每个人的perl包装器。我没有python的经验,但我在phyton中搜索了这些API的一些包装。您只需“ ”就可以编写自己的包装器来获取跨平台库。

答案 2 :(得分:0)

他们是一个收集插件,用于为正则表达式模式添加文件。您可以绑定阈值并触发警报脚本。

答案 3 :(得分:0)

是一个足够的shell脚本吗?应该是* nix's的跨平台

for FILE in $LIST ; do #caveat if files may contain spaces, set IFS to be a \n
touch -r "$FILE" "/tmp/$FILE.timestamp" #use /dev/shm if available vs. /tmp
done
#...
while :; do
  sleep 1 #you need some sleep value to prevent eating CPU
  for FILE in $LIST ; do
    [ "$FILE" -nt "/tmp/$FILE.timestamp" ] && modified_action "$FILE"
  done
done

答案 4 :(得分:0)

很好的问题,对于想要自动化构建和测试程序的人有好处。持续集成是最佳选择。

如果您正在使用git,是否有某种方法可以在git存储库中安装触发器?您可以让您的触发器(在本地存储库上运行)推送您的更改,然后在构建服务器上激活构建/测试周期。如果您不使用git,其他版本控制系统可能具有类似的功能。

答案 5 :(得分:0)

Guard根据功能列表,通过FSEvent和Linux通过Inotify支持OS X中的文件更改检测。我们在工作中使用它来进行持续集成,并且它运行良好。

答案 6 :(得分:0)

fswatch似乎是要走的路,特别是如果你想监控新文件的话。

效率&稳定性取决于底层OS API。这是项目自述文件中的相关摘录:

  

fswatch的局限性在很大程度上取决于所使用的显示器:

     
      
  • FSEvents监视器仅在OS X上可用,没有已知的限制,并且可以很好地扩展到正在运行的文件数量   观察到的
  •   
  • kqueue监视器在任何具有kqueue的* BSD系统上都可用,需要为每个正在观看的文件打开文件描述符。   因此,此监视器与文件数量严重不同   观察,并且一旦fswatch进程可能开始行为不端   用完文件描述符。在这种情况下,fswatch会转储一个错误   每个无法打开的文件的标准错误。
  •   
  • 自内核2.6.13以来在Linux上可用的inotify监视器,如果事件的生成速度快于它们,则可能会出现队列溢出   从队列中读取。在任何情况下,应用程序都保证   接收溢出通知,可以优雅地处理   恢复。如果队列溢出,fswatch当前会抛出异常   发生。未来的版本将通过发射适当的处理溢出   通知。
  •