Bash скрипт для отслеживания изменения файлов и выполнения команды

У меня есть папка с кучей вложенных папок, в этих папках есть asciidoctor файлы с расширением .adoc.

Каждый раз, когда я вношу изменения в файлы (а это часто), мне нужно запускать

asciidoctor -q filename.adoc

для компиляции их в формат HTML.

Я пытаюсь автоматизировать этот процесс. Пока что я пришел к этому, используя entr:

ls *.adoc | entr asciidoctor -q *.adoc

но это работает только с существующей папкой, а не с вложенными папками. Я пробовал этот вариант, но он не работает:

find . -name '*.adoc' | entr asciidoctor -q *.adoc

Есть идеи, как я могу реализовать этот автоматический процесс для всех вложенных папок?

0
01.09.2016, 13:31
3 ответа
  1. Искать файлы '* .adoc'
  2. Проверить, является ли filename.adoc более новым, чем filename.html
  3. если да, запустить asciidoctor на нем

     find. -name '* .adoc' | пока читал ФАЙЛ; 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
0
28.01.2020, 02:47

Перед тем, как вы начнете вносить изменения, я предлагаю вам сделать отметку времени, например

touch time.stamp.file

После редактирования вы можете найти все измененные файлы по

find . -name '*.adoc' -newer time.stamp.file -exec asciidoctor -q {} +
1
28.01.2020, 02:47

Это можно сделать с помощью инструмента с открытым исходным кодом 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 имеет достаточные привилегии to
/ path / to / test file и
чтение, выполнение привилегий для /path/to/script.sh

Когда мы меняем monit. conf
затем как root:

monit reload 

для получения изменений в демон monit

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

Я считаю, что эту конфигурацию можно легко обновить чтобы соответствовать потребностям вашего приложения!

0
28.01.2020, 02:47

Теги

Похожие вопросы