我需要创建一个 shell 脚本,当start
在特定目录中创建调用的文件时执行应用程序。
如何编写一个 shell 脚本来等待在特定位置创建具有特定名称的文件?
答案1
如果您的系统有inotifywait
(大多数 Linux 发行版、OpenBSD 以及可能的其他发行版),正如其他人提到的,占用资源最少的方法是使用inotifywait
:
rm -f yourdirectory/start
while [ "$(inotifywait -e create -q --format %f yourdirectory)" != "start" ]; do :; done
yourcommand
这将确保start
从 中删除该文件yourdirectory
,然后等待其创建,然后运行yourcommand
。-e create
指定我们只对创建事件感兴趣,-q
指定我们不需要inotifywait
的诊断消息,并--format %f
指定我们只想在输出中查看创建的文件的名称。
如果您没有inotifywait
,以下操作也将起作用,最多延迟一秒:
rm -f yourdirectory/start
while [ ! -e yourdirectory/start ]; do sleep 1; done
yourcommand
答案2
我喜欢使用“inoticoming”工具来监视目录的更改。具有日志记录和 pid 文件创建功能。您可以使用附加的“操作选项”来运行更改命令,这非常不错:)
我还记得一个名为“fileschanged”的工具,但从未使用过它,可能值得一看。 -杰伊