Tengo una carpeta con un montón de subcarpetas, estas carpetas se han asciidoctor
formateado con .adoc
extensió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
inotify
familia de llamadas al sistema, las utilidades del espacio de usuario que aprovechan estas llamadas son proporcionadas por elinotify-tools
paquete en Ubuntu (disponible en el repositorio del universo). Si aún no lo tiene, instálelo mediante:inotify-tools
proporcionainotifywait
yinotifywatch
binarios, necesitamos el primero.Por lo tanto, desea ejecutar el comando
asciidoctor -q some_file
cuando.adoc
se modifique cualquier archivo (some_file
será reemplazado por eso), si es así, suponiendo que sus.adoc
archivos estén en el directorio/foo/bar
, puede configurar el reloj:-q
habilita el modo silencioso, sin información deinotifywait
sí mismo-m
habilita el modo monitor, de lo contrario, saldrá después del primer evento--event modify
, solo nos interesa elmodify
evento, es decir, cuando se modifica un archivo. Otros valores posibles incluyenopen
,close
etc.--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/*.adoc
se expandirá a todos los.adoc
archivos en el/foo/bar
directorioAhora 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
grep
para filtrar solo los archivos deseados. Aquí configura el reloj recursivamente (-r
) en el directorio/foo/bar
y lo usagrep
para filtrar solo.adoc
archivos:Al mirar directorios, el especificador de formato de salida se
%w
resuelve en el nombre del directorio, por lo que debemos%f
obtener el nombre del archivo. Mientras mira los archivos,%f
resolvería vaciar la cadena.Tenga en cuenta que, también puede ejecutar
inotifywait
en 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
asciidoctor
con cualquier otro comando de su elección, si lo desea.Comprueba
man inotifywait
para tener más idea.fuente
El uso
inotifywait
es el enfoque típico, pero también hay una utilidad separada llamadainotify-hookable
que 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-hookable
Existen 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.conf
archivo 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
while
loop 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