Linux Inotify监视具有一定深度的子目录?
是否可以使用inotify将新创建的子目录中的文件监视到某个级别 假设有一个结构:Linux Inotify监视具有一定深度的子目录?,linux,inotify,Linux,Inotify,是否可以使用inotify将新创建的子目录中的文件监视到某个级别 假设有一个结构: /home/user1/data /home/user2/data ... 定期添加新用户 我们只想监视“data”目录中的数据,但不想监视新创建的子目录中的数据,例如,如果用户创建了“/home/user3/data/test\u uploads”,则不应该对其进行处理 如果我们将inotifywait与以下语法一起使用,它将只检查现有目录: inotifywait -m -e close_write /ho
/home/user1/data
/home/user2/data
...
定期添加新用户
我们只想监视“data”目录中的数据,但不想监视新创建的子目录中的数据,例如,如果用户创建了“/home/user3/data/test\u uploads”,则不应该对其进行处理
如果我们将inotifywait与以下语法一起使用,它将只检查现有目录:
inotifywait -m -e close_write /home/*/data/
如果我们在/home中创建新用户,它将不会被处理,因为inotify只扫描现有目录
有没有办法监视新添加的目录到某个级别,但不要使用“-r”
选项,因为它将监视所有子目录
提前谢谢
inotifywait
有--exclude
选项,但不幸的是,它没有--include
选项,并且不支持扩展POSIX正则表达式,因此不可能只包含与给定模式不匹配的文件。请参阅中的详细信息
其他选择:
- 您可以只
输出grep
,但这种方式无法避免监控所有不必要的子文件的开销inotifywait
- 您可以使用patched
和inotifywait
选项,如上面链接的答案中所述--include
- 您可以直接使用
API编写自己的程序,以便控制要监视的文件和要排除的文件。还有各种脚本语言的绑定,包括Pythoninotify
- 您可以使用各种
包装器,例如Python模块inotify
下面是一个使用
watchdog
Python模块和repo脚本的示例
启动监视器:
创建文件和目录:
监视器输出将为:
created /home/user/data/bar
modified /home/user/data/bar
请注意,/home/user/foo
和/home/user/data/baz/qux
不匹配
如果需要按类型筛选事件:
- 如果使用的是
,请选中shell命令中的键入:watchdemo.py
... \ --command='[ "${watch_event_type}" = created ] && echo "${watch_src_path}"'
- 如果您直接使用
Python模块,请从所需方法派生自定义事件处理程序并覆盖所需的方法,例如,在创建的\u上watchdog
--directory
选项谢谢!第一个选项工作出色,它显示“创建的”事件。但是第二个目录不起作用,我尝试了--directory,但它不识别标志,看起来它不存在。我尝试使用选项“directories/home/user”,但出现错误“OSError:Path不是目录”。看起来目录有问题directive@Igor我的错误。目录作为位置参数传递给watchdemo
,不带选项。请参阅更新的答案。Hi@gavv,这种方法似乎有问题,因为文件在实际关闭之前报告为“已创建”。因此,它正在处理实际上没有完全写入的文件。是否有任何方法仅在文件完全写入并关闭后才对其进行处理?
created /home/user/data/bar
modified /home/user/data/bar
... \
--command='[ "${watch_event_type}" = created ] && echo "${watch_src_path}"'