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
лише фільтрувати потрібні файли. Тут налаштування перегляду рекурсивно ( -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
щоб отримати більше уявлень.