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
чтобы получить больше идей.