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щоб отримати більше уявлень.