我有一个带有一堆子文件夹的文件夹,这些文件夹具有asciidoctor
带扩展名的格式化文件.adoc
。
每次我对文件进行更改(经常)时,我都需要运行
asciidoctor -q filename.adoc
将其编译为 HTML 格式。
我正在尝试使该过程自动化。到目前为止我已经使用了这个进入:
ls *.adoc | entr asciidoctor -q *.adoc
但仅适用于现有文件夹,不适用于子文件夹。我尝试过这种变体,但它不起作用:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
我有什么想法可以为所有子文件夹实现这个自动化过程吗?
答案1
在您开始进行更改之前,我建议您制作时间戳,例如
touch time.stamp.file
编辑后,您可以通过以下方式找到所有更改的文件
find . -name '*.adoc' -newer time.stamp.file -exec asciidoctor -q {} +
答案2
- 搜索“*.adoc”文件
- 测试 filename.adoc 是否比 filename.html 新
如果是这样,请对其运行 asciidoctor
find . -name '*.adoc' | while read FILE; do [ "${FILE}" -nt "${FILE%adoc}html" ] && asciidoctor -q "${FILE}" ; done
或放入脚本:
#! /bin/bash
find . -name '*.adoc' | while read FILE; do
if [ "${FILE}" -nt "${FILE%adoc}html" ]; then
asciidoctor -q "${FILE}"
fi
done
一行或脚本可以从 crontab 每分钟运行一次:
crontab -e
添加一行
* * * * * /home/joe/update_adoc.bash
答案3
这可以通过使用开源工具来完成monit
!
让我们添加以下内容/etc/monit.conf
:
check file test with path /path/tp/test
if changed checksum then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
我们应该确保具有a_user_id
as 的用户id
有足够的权限来/path/to/test
文件和
读取、执行权限,/path/to/script.sh
当我们将monit.conf
then 更改为 root 时:
monit reload
获取更改monit daemon
watch monit status
monit
触发事件时可以显示报告中的更改
例如,在此示例中,
当我们更改文件的内容时,/path/to/test
将调用 /path/to/script.sh 脚本。
默认情况下,monit
每 30 秒唤醒一次并执行配置的检查
要检查添加到目录的新文件或目录中的文件是否发生更改:
check directory test2 with path /path/to<br/>
if changed timestamp then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
我相信可以轻松更新此配置以满足您的应用程序的需求!