Linux上的inotifywait是否允许在超时期间收集事件?

时间:2013-06-03 22:04:51

标签: linux unix inotify fswatch

比照OSX上的FSEvents,默认情况下会在触发事件之前收集超过1秒的FS事件(超时可配置)。

这样做的好处是可以将一系列文件系统更改收集到单个事件中(因此脚本的运行速度不会超过其所需),但代价是延迟。

例如,除了文件之外,在Vim中保存文件会修改许多临时文件(它往往会删除缓冲区文件,更新撤消文件,还会创建并删除名为4193的测试文件)本身。在OSX上使用这个API的小工具,例如fswatch的分支,所有这些都可以折叠成一个“批处理事件”,而inotifywait -m我指定的所有事件都会覆盖到在单独的行中流,使得在没有外部处理的情况下分组不容易。

我非常确定解决方案只是包装并执行此处理,但我希望有一个隐藏的功能来指定FSEvents允许的超时。

1 个答案:

答案 0 :(得分:2)

我实际上开始相信这种事情不应该属于inotify的功能范围。

我还没有找到合适的解决方案,但在我看来,有一种优雅的方式可以做到这一点。这是我的起点(如果在一秒钟内没有看到任何东西就会退出,我想在一秒钟内积累一些东西)

目前正在进行一些测试。这是一些测试脚本,我已经很好地工作了。

group=0
( for val in {1..10}; do echo "$RANDOM/10000" | bc | xargs sleep; echo $val; done ) |  while true; do while read -t 1 line; do echo "read $group $line"; done; ((group++)); done