如何在创建文件时自动执行命令

如何在创建文件时自动执行命令

如何自动化执行命令的过程创建文件。我有一个应用程序,其中一个工具从 xml 文件生成 xsd 模式。我的下一个模块使用此 xsd 模式进行进一步处理。
我想自动执行此过程,即在生成文件后运行命令。此应用程序将运行每天在 ubuntu 机器上,所以我想自动化它。我不希望在此过程中有任何人工干预。我确实搜索了用于类似目的的 inotify lib,但它迫使我更改系统的整体设计。还有
其他可以解决此目的的替代方案吗?任何帮助都非常感谢。

答案1

确定文件何时完成写入是最困难的部分。最好使用如下脚本:

#!/bin/sh
program-that-creates-xsd
program-that-does-further-processing

如果你不能像这样构造你的程序,那么真的没有什么好的解决方案。即使使用 inotify,也几乎不可能判断 XSD 何时真正完成。

答案2

可以通过检测特定文件夹中的文件创建来完成,它是可通过安装的包inotifywait的一部分。inotify-toolssudo apt-get install inotify-tools

举个例子,我们可以-m在目录上建立一个连续的监视(标志)Desktop并解析创建的目录条目的输出,但是确定一个文件是否是常规文件以及文件名是否是我们需要的必须手动完成:

inotifywait -m --format "%f" -e create ./Desktop/  | 
while read -r fname; do 
    [ -f ./Desktop/"$fname" ] && [ "$fname" = "specific.csv" ] && echo "We got 'em!" 
done

因此,如果有人创建了specific.csv应该被拒绝的目录,但如果specific.csv创建了,我们将执行echo部分,可以用其他命令或 shell 函数替换。如果您确实需要非阻塞执行,您可以考虑添加setsid在新会话中启动命令并让脚本继续监视。

相关内容