Linux предоставляет удобный интерфейс для мониторинга всех событий файловой системы, таких как создание, изменение, удаление файлов. Интерфейс представляет собой inotifyсемейство системных вызовов, утилиты пользовательского пространства, использующие эти вызовы, предоставляются inotify-toolsпакетом в Ubuntu (доступно в репозитории юниверсов). Если у вас его еще нет, установите:
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для фильтрации только нужных файлов. Здесь установка watch recursively ( -r) на каталог /foo/barи использование grepдля фильтрации только .adocфайлов:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
При просмотре каталогов спецификатор выходного формата %wразрешается в имя директории, поэтому нам нужно %fполучить имя файла. При просмотре файлов %fразрешил бы пустую строку.
Обратите внимание, что вы также можете работать inotifywaitв режиме daemon ( -d), вы также можете создавать сценарии целиком и / или работать в фоновом режиме, и / или играть с другими дополнительными параметрами.
Кроме того, вы можете заменить asciidoctorлюбую другую команду по вашему выбору, если хотите.
Проверьте, man inotifywaitчтобы получить больше идей.