在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
。我该如何实现呢?
答案 0 :(得分:3)
你可以管道:
inotifywait -m /my/directory | while read LINE; do ./do_something.sh $LINE; done
请记住,您为某些操作获取了许多事件,每个操作都会触发脚本的启动。
您还可以使用perl或其他语言直接使用API,这样可以提供很大的灵活性。