Linux提供了一个不错的界面来监视所有文件系统事件,例如创建,修改,删除文件。该接口是inotify系统调用的集合,利用这些调用的用户空间实用程序由inotify-toolsUbuntu中的软件包提供(可在Universe存储库中找到)。如果尚未安装,请通过以下方式安装:
sudo apt-get install inotify-tools
inotify-tools提供inotifywait和inotifywatch二进制文件,我们需要第一个。
因此,您想在修改asciidoctor -q some_file任何.adoc文件时运行该命令(some_file将替换为该命令),如果是这样,那么假设您的.adoc文件位于目录中/foo/bar,则可以设置监视:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q启用安静模式,inotifywait自身无任何信息
-m 启用监视器模式,否则它将在第一个事件后退出
--event modify,我们只对modify事件感兴趣,即文件被修改时。其他可能的值包括open,close等等。
--format %w,我们只希望修改的文件名而不是其他信息,因为我们将使用文件名作为另一个命令的输入
/foo/bar/*.adoc将扩大到所有.adoc在文件/foo/bar目录
现在,上面的代码将显示修改后的文件名,现在可以在文件名上运行命令(假定命令通过STDIN接受参数):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
您还可以在目录上设置递归监视,然后只需要使用grep来过滤所需的文件。在此处,递归地将监视设置为(-r)目录,/foo/bar并grep用于仅过滤.adoc文件:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
在查看目录时,输出格式说明符%w解析为目录名,因此我们需要%f获取文件名。在观看文件时,%f将解析为空字符串。
请注意,您还可以inotifywait在守护程序(-d)模式下运行,还可以编写整个脚本,和/或在后台运行,和/或使用其他更多选项。
另外,如果需要,可以用asciidoctor您选择的任何其他命令替换。
检查man inotifywait以获得更多想法。