如何使用 inotifywait 等到文件创建并超时写入内容
How to use inotifywait to wait till a file is created and is written content with timeout
我在 redhat ubi-minimal 中使用 shell 命令。我想监控一个文件“./hello.txt”,这个文件还不存在。我想使用 inotifywait
来监视这个文件,并等待直到 ./hello.txt
创建并写入一些非空内容,或者固定超时。
在 inotifywait
's man page 之后,我试过:
inotifywait -m -e create -r --fromfile ./hello.txt -t 30
with -m -e create
指定此命令无限期执行直到 create
发生。
但它只给出:
Couldn't open ./hello.txt: No such file or directory
No files specified to watch!
我想知道如何指定 inotifywait 的标志来实现我的期望。
你不能等待 ./hello.txt
因为它还不存在,所以内核没有节点可以附加 inotify 对象。
您需要在父目录 (.
) 上等待。
问题是你必须找到一种方法来只过滤掉特定的文件。
如果你至少有 inotifywait
的 3.20.1 版本,你可以只使用选项 --include
来传递一个带有你的文件名的正则表达式。
如果你不这样做,......好吧,你可以尝试使用选项 --exclude
并编写一个反转的正则表达式,或者你可以编写一个脚本来过滤结果外部。这两种选择都相当不方便。
这个问题的答案描述了制作过滤器的各种方法:https://unix.stackexchange.com/q/323901/133542.
如果您有新版本,命令将如下所示:
inotifywait -e close_write -t 30 --include 'hello\.txt' .
几点说明:
- 标志
-m
和 -t
不允许一起使用(至少在我的版本中)。但是,您正在等待一个特定事件,因此不需要 -m
.
- 在您的代码中,您正在等待事件
create
,但您已声明您想知道文件何时写入。我已将事件更改为 close_write
,这意味着文件在以可写模式打开后正在关闭。
- 标志
--fromfile
表示该文件包含要观看的文件列表,而不是它本身正在被观看。我已经移除了旗帜。
- 标志
-r
只有在您想要查看整个目录树时才需要。如果文件直接在watched目录下,则不需要。
我在 redhat ubi-minimal 中使用 shell 命令。我想监控一个文件“./hello.txt”,这个文件还不存在。我想使用 inotifywait
来监视这个文件,并等待直到 ./hello.txt
创建并写入一些非空内容,或者固定超时。
在 inotifywait
's man page 之后,我试过:
inotifywait -m -e create -r --fromfile ./hello.txt -t 30
with -m -e create
指定此命令无限期执行直到 create
发生。
但它只给出:
Couldn't open ./hello.txt: No such file or directory
No files specified to watch!
我想知道如何指定 inotifywait 的标志来实现我的期望。
你不能等待 ./hello.txt
因为它还不存在,所以内核没有节点可以附加 inotify 对象。
您需要在父目录 (.
) 上等待。
问题是你必须找到一种方法来只过滤掉特定的文件。
如果你至少有 inotifywait
的 3.20.1 版本,你可以只使用选项 --include
来传递一个带有你的文件名的正则表达式。
如果你不这样做,......好吧,你可以尝试使用选项 --exclude
并编写一个反转的正则表达式,或者你可以编写一个脚本来过滤结果外部。这两种选择都相当不方便。
这个问题的答案描述了制作过滤器的各种方法:https://unix.stackexchange.com/q/323901/133542.
如果您有新版本,命令将如下所示:
inotifywait -e close_write -t 30 --include 'hello\.txt' .
几点说明:
- 标志
-m
和-t
不允许一起使用(至少在我的版本中)。但是,您正在等待一个特定事件,因此不需要-m
. - 在您的代码中,您正在等待事件
create
,但您已声明您想知道文件何时写入。我已将事件更改为close_write
,这意味着文件在以可写模式打开后正在关闭。 - 标志
--fromfile
表示该文件包含要观看的文件列表,而不是它本身正在被观看。我已经移除了旗帜。 - 标志
-r
只有在您想要查看整个目录树时才需要。如果文件直接在watched目录下,则不需要。