我想写一个脚本,当一个文件在一个特定的目录(或子目录)中被更改时(意味着内容更改或文件被同名的文件覆盖)触发一些代码。在运行代码和更改文件时,似乎每次都要运行两次,因为我得到了两次echo输出。有什么我遗漏的吗?

while true; do
   change=$(inotifywait -e close_write /home/bla)
   change=${change#/home/bla/ * }
   echo "$change"
done

当我在指定目录的子目录中更改某些内容时,它也不会执行任何操作。
在我更改指定目录中的文件后,输出如下所示:
Setting up watches.
Watches established.
filename
Setting up watches.
Watches established.
filename
Setting up watches.
Watches established.

最佳答案

我无法重现脚本两次输出消息。你确定你没有在后台运行两次吗?或者你使用编辑器来更改文件?某些编辑器在文件打开时将备份文件放在已编辑的文件旁边。这可以解释你看到两条信息。
对于递归目录监视,需要将选项-r传递到inotifywait。但是,不应该在超大型文件系统树上运行它,因为inotify监视的数量是有限的。您可以通过

cat /proc/sys/fs/inotify/max_user_watches

关于linux - inotifywait无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35815560/

10-10 14:48