Tengo una carpeta con un montón de subcarpetas, estas carpetas se han asciidoctorformateado con .adocextensión.
Cada vez que realizo cambios en los archivos (lo cual es frecuente) necesito ejecutar
asciidoctor -q filename.adoc
para compilarlo en formato HTML.
Estoy tratando de automatizar el proceso. hasta ahora he venido con esto usando entr :
ls *.adoc | entr asciidoctor -q *.adoc
pero solo funciona con carpetas existentes, no para subcarpetas. He intentado esta variación, pero no funciona:
find . -name '*.adoc' | entr asciidoctor -q *.adoc
¿Alguna idea de cómo podría implementar este proceso de automatización para todas las subcarpetas?
command-line
bash
filesystem
salvado
fuente
fuente

Respuestas:
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 elinotify-toolspaquete en Ubuntu (disponible en el repositorio del universo). Si aún no lo tiene, instálelo mediante:inotify-toolsproporcionainotifywaityinotifywatchbinarios, 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:-qhabilita el modo silencioso, sin información deinotifywaitsí mismo-mhabilita el modo monitor, de lo contrario, saldrá después del primer evento--event modify, solo nos interesa elmodifyevento, es decir, cuando se modifica un archivo. Otros valores posibles incluyenopen,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/bardirectorioAhora 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):
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 usagreppara filtrar solo.adocarchivos: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.fuente
El uso
inotifywaites el enfoque típico, pero también hay una utilidad separada llamadainotify-hookableque simplemente te permite ejecutar un comando cuando cambia un archivo (o directorio):Parece salir después de activar el comando una vez; No veo una opción para la observación continua, por lo que podría hacer algo como:
Tenga en cuenta que hay opciones para monitorear varios archivos o un directorio, de forma recursiva, y opciones para ignorar archivos / rutas.
fuente
sudo apt-get install inotify-hookableExisten muchas herramientas, especialmente si busca en su repositorio
lo que nos da muchas herramientas. Pero no tienes que probarlos porque hice eso.
He probado estas herramientas y muchas otras:
Entre estas herramientas encontré tres de ellas útiles y confiables:
Y entre estos tres, el direvent es el mejor sin duda.
Es tan útil y confiable de usar que lo he usado para una tubería simple con mis microservicios que tengo.
direvent.confarchivo para verEste es solo uno de los archivos de configuración que tengo en el que cada vez que hay un cambio para escribir , se ejecuta este comando, que también podría ser un script bash .
No es necesario usar
whileloop u otras cosas.caracteristicas
Desarrollado por Sergey Poznyakoff .
Instalando
Pero instalarlo usando su código fuente es bastante fácil y directo, lo que le brinda la última versión (en este momento es: 5.1).
fuente
Bueno, te recomiendo lo siguiente.
fuente