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