如何使用inotifywait监听待创建文件的写入操作并设置超时
错误原因
你之前的命令存在两个核心错误:
--fromfile参数的作用是读取指定文件内的路径列表作为监控目标,不是用来指定你要监控的目标文件本身,你要监控的./hello.txt此时还不存在,自然会触发「找不到文件」的报错- inotify机制本身只能监控已存在的文件或目录,要监听尚未创建的文件,需要先监控它所属的父目录(也就是当前目录
./),再从目录的事件中过滤目标文件名的对应事件。
正确实现方案
ubi-minimal默认没有预装inotify-tools,先执行安装:
microdnf install -y inotify-tools
直接执行以下命令即可实现需求:30秒超时,直到./hello.txt被创建且写入非空内容后自动终止:
timeout 30 bash -c ' inotifywait -m -e create,close_write ./ | while read -r dir event filename; do if [ "$filename" = "hello.txt" ] && [ -s ./hello.txt ]; then pkill -P $$ inotifywait exit 0 fi done '
参数说明
timeout 30:给整个监控逻辑加30秒超时,超时后自动终止命令,符合你设置超时的需求inotifywait -m -e create,close_write ./:持续监控当前已存在的工作目录的「文件创建」、「文件写入完成关闭」两类事件,不会触发路径不存在的报错[ "$filename" = "hello.txt" ]:过滤出目标文件的事件[ -s ./hello.txt ]:判断目标文件存在且内容非空- 匹配到符合要求的事件后,杀掉当前子进程内的inotifywait进程,正常退出
你可以通过命令的返回值判断最终结果:返回值为0代表成功监听到符合要求的文件,返回值为124代表超时退出。
内容的提问来源于stack exchange,提问作者IsaIkari
相关产品推荐
相关产品推荐

