У меня есть папка с кучей подпапок, эти папки asciidoctor
отформатированы с .adoc
расширением.
Каждый раз, когда я вносил изменения в файлы (что часто), мне нужно запустить
asciidoctor -q filename.adoc
скомпилировать его в формат HTML.
Я пытаюсь автоматизировать процесс. до сих пор я пришел с этим с помощью entr :
ls *.adoc | entr asciidoctor -q *.adoc
но работает только с существующей папкой не для подпапок. Я пробовал этот вариант, но он не работает:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
Любые идеи, как я мог бы реализовать этот процесс автоматизации для всех вложенных папок?
command-line
bash
filesystem
отруби
источник
источник
Ответы:
Linux предоставляет удобный интерфейс для мониторинга всех событий файловой системы, таких как создание, изменение, удаление файлов. Интерфейс представляет собой
inotify
семейство системных вызовов, утилиты пользовательского пространства, использующие эти вызовы, предоставляютсяinotify-tools
пакетом в Ubuntu (доступно в репозитории юниверсов). Если у вас его еще нет, установите:inotify-tools
предоставляетinotifywait
иinotifywatch
двоичные файлы, нам нужен первый.Таким образом, вы хотите выполнить команду,
asciidoctor -q some_file
когда какой-либо.adoc
файл будет изменен (some_file
будет заменен этим), если, если это так, если ваши.adoc
файлы находятся в каталоге/foo/bar
, вы можете установить часы:-q
включает тихий режим, никакой информации отinotifywait
себя-m
включает режим мониторинга, иначе он выйдет после первого события--event modify
, нас интересует толькоmodify
событие, то есть когда файл изменяется. Другие возможные значения включаютopen
иclose
т. Д.--format %w
, мы хотим, чтобы имя файла было изменено, а не куча другой информации, так как мы будем использовать имя файла в качестве ввода для другой команды/foo/bar/*.adoc
будет расширен до всех.adoc
файлов в/foo/bar
каталогеТеперь вышеприведенное покажет вам имя файла, когда что-либо будет изменено, теперь для запуска команды с именем файла (при условии, что команда принимает аргументы через STDIN):
Вы также можете установить рекурсивное наблюдение за каталогом, которое вам нужно будет использовать
grep
для фильтрации только нужных файлов. Здесь установка watch recursively (-r
) на каталог/foo/bar
и использованиеgrep
для фильтрации только.adoc
файлов:При просмотре каталогов спецификатор выходного формата
%w
разрешается в имя директории, поэтому нам нужно%f
получить имя файла. При просмотре файлов%f
разрешил бы пустую строку.Обратите внимание, что вы также можете работать
inotifywait
в режиме daemon (-d
), вы также можете создавать сценарии целиком и / или работать в фоновом режиме, и / или играть с другими дополнительными параметрами.Кроме того, вы можете заменить
asciidoctor
любую другую команду по вашему выбору, если хотите.Проверьте,
man inotifywait
чтобы получить больше идей.источник
Использование
inotifywait
- это типичный подход, но есть и отдельная утилита,inotify-hookable
которая позволяет запускать команду при изменении файла (или каталога):Кажется, чтобы выйти после запуска команды один раз; Я не вижу опции для непрерывного просмотра, поэтому вы можете сделать что-то вроде:
Обратите внимание, что существуют опции для рекурсивного мониторинга нескольких файлов или каталогов, а также опции для игнорирования файлов / путей.
источник
sudo apt-get install inotify-hookable
Есть много инструментов, особенно если вы ищете в своем хранилище
что дает нам много инструментов. Но вам не нужно проверять их, потому что я это сделал.
Я проверил эти инструменты и многие другие:
Среди этих инструментов я нашел три из них полезных и надежных:
И между этими тремя, без сомнения , лучшая - лучшая.
Он настолько полезен и надежен, что я использовал его для простого конвейера с моими микросервисами, которые у меня есть.
direvent.conf
файл для просмотраЭто всего лишь один из моих конфигурационных файлов, в которых всякий раз, когда происходит изменение записи, выполняется эта команда, что также может быть сценарием bash .
Нет необходимости использовать
while
петли или другие вещи.функции
Разработано Сергеем Позняковым .
Установка
Но установить его, используя его исходный код, довольно легко и просто, что дает вам последнюю версию (прямо сейчас: 5.1).
источник
Ну, я рекомендую следующее.
источник