Inotifywait用于大型目录

时间:2011-11-11 19:30:39

标签: callback inotify

在inotifywait man中更改了以下内容

  

-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。我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

你可以管道:

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

请记住,您为某些操作获取了许多事件,每个操作都会触发脚本的启动。

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