0

在 inotifywait 人的变化中陈述了以下内容

-r, --recursive 监视作为参数传递的任何目录的所有子目录。手表将递归设置到无限深度。不遍历符号链接。新创建的子目录也将被监视。

警告:如果你在监视大树的根目录时使用该选项,可能需要一段时间才能建立所有 inotify监视,并且在此期间不会收到事件。此外,由于每个子目录将建立一个 inotify 手表,因此可能会达到每个用户的最大 inotify 手表数量。默认最大值为 8192;可以通过写入 /proc/sys/fs/inotify/max_user_watches 来增加它。

我认为这意味着每次inotifywait调用时,大型目录都会有延迟。因此,像这样使用监视功能不断监视一个大目录

inotifywait -m /home/user/Documents

比像这样手动循环目录更有效(来自手册页中的示例)

while inotifywait /home/user/Documents; do
 #Do Something for each file change
done

作为 while 循环的每次迭代,您必须再次设置 inotifywait。但是使用第一个选项,我无法根据回报执行。理想情况下,我想要的是这样的回调函数

inotifywait -m --callback ./callback.sh /home/user/Documents

所以callback.sh每次都被调用,返回值为inotifywait. 我将如何实现这一点?

4

1 回答 1

3

你可以像这样管道它:

inotifywait -m /my/directory | while read LINE; do ./do_something.sh $LINE; done

请记住,对于某些操作,您会收到许多事件,每个事件都会触发脚本的启动。

您还可以使用 perl 或其他语言直接使用 API,这为您提供了极大的灵活性。

于 2011-11-11T19:37:43.133 回答