Linux proporciona una interfaz agradable para monitorear todos los eventos del sistema de archivos, como crear, modificar y eliminar archivos. La interfaz es una inotifyfamilia de llamadas al sistema, las utilidades del espacio de usuario que aprovechan estas llamadas son proporcionadas por el inotify-toolspaquete en Ubuntu (disponible en el repositorio del universo). Si aún no lo tiene, instálelo mediante:
sudo apt-get install inotify-tools
inotify-toolsproporciona inotifywaity inotifywatchbinarios, necesitamos el primero.
Por lo tanto, desea ejecutar el comando asciidoctor -q some_filecuando .adocse modifique cualquier archivo ( some_fileserá reemplazado por eso), si es así, suponiendo que sus .adocarchivos estén en el directorio /foo/bar, puede configurar el reloj:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qhabilita el modo silencioso, sin información de inotifywaitsí mismo
-m habilita el modo monitor, de lo contrario, saldrá después del primer evento
--event modify, solo nos interesa el modifyevento, es decir, cuando se modifica un archivo. Otros valores posibles incluyen open, closeetc.
--format %w, solo queremos el nombre del archivo que se modifica en lugar de un montón de otra información, ya que usaremos el nombre del archivo como entrada para otro comando
/foo/bar/*.adocse expandirá a todos los .adocarchivos en el /foo/bardirectorio
Ahora lo anterior le mostrará el nombre del archivo cada vez que se modifique alguno, ahora para ejecutar el comando en el nombre del archivo (suponiendo que el comando tome argumentos a través de STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
También puede configurar un reloj recursivo en el directorio, luego deberá usarlo greppara filtrar solo los archivos deseados. Aquí configura el reloj recursivamente ( -r) en el directorio /foo/bary lo usa greppara filtrar solo .adocarchivos:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
Al mirar directorios, el especificador de formato de salida se %wresuelve en el nombre del directorio, por lo que debemos %fobtener el nombre del archivo. Mientras mira los archivos, %fresolvería vaciar la cadena.
Tenga en cuenta que, también puede ejecutar inotifywaiten modo daemon ( -d), también puede hacer un script de todo, y / o ejecutar en segundo plano, y / o jugar con él más otras opciones.
Además, puede reemplazarlo asciidoctorcon cualquier otro comando de su elección, si lo desea.
Comprueba man inotifywaitpara tener más idea.