我想编写一个脚本,当文件在特定目录(或子目录)中发生更改(意味着内容更改或文件被同名文件覆盖)时触发某些代码。当我运行我的代码并更改文件时,它似乎每次运行两次,因为我得到两次echo输出。有什么我想念的吗?
while true; do
change=$(inotifywait -e close_write /home/bla)
change=${change#/home/bla/ * }
echo "$change"
done
当我在指定目录的子目录中更改某些内容时,它也没有做任何事情。
在更改指定目录中的文件后,outpoot看起来像这样:
Setting up watches.
Watches established.
filename
Setting up watches.
Watches established.
filename
Setting up watches.
Watches established.
答案 0 :(得分:1)
我无法重现脚本输出两次消息。你确定你不会两次(在后台)运行吗?或者您使用编辑器更改文件?当文件打开时,某些编辑器会在编辑的文件旁边放置一个备份文件。这可以解释您看到两条消息。
对于递归目录观看,您需要将选项-r
传递给inotifywait
。但是,您不应该在超大文件系统树上运行它,因为inotify监视的数量是有限的。您可以通过
cat /proc/sys/fs/inotify/max_user_watches