在inotifywait手册改变陈述Inotifywait对于大型目录
-r,--recursive手表作为参数传递的任何目录的所有子目录下。手表将递归设置为无限深 。符号链接没有被过滤。新创建的 子目录也将被监视。
警告:如果您在观看的 根目录中的大树下,使用此选项可能需要相当长一段时间,直到所有的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
返回值每次被调用。我将如何实现这一点?
我从来没有用过Perl。我注意到很多示例使用C,但我更喜欢尽可能使用shell。 – puk
总是有机会使用命令的“-e”开关过滤事件,并且/或者让do_something.sh grep相关参数的'$ LINE'。 –