Hemos buscando en el mundo on line y así darte la respuesta a tu problema, si continúas con inquietudes puedes dejar tu pregunta y te contestamos porque estamos para ayudarte.
Solución:
Linux proporciona una interfaz agradable para monitorear todos los eventos del sistema de archivos, como crear, modificar y eliminar archivos. La interfaz es inotify
familia de llamadas al sistema, las utilidades del espacio de usuario que aprovechan estas llamadas son proporcionadas por el inotify-tools
paquete en Ubuntu (disponible en el repositorio de universos). Si aún no lo tiene, instálelo mediante:
sudo apt-get install inotify-tools
inotify-tools
proporciona inotifywait
y inotifywatch
binarios, necesitamos el primero.
Entonces quieres ejecutar el comando asciidoctor -q some_file
cuando alguno .adoc
el archivo está modificadosome_file
será reemplazado por eso), si es así, asumiendo su .adoc
los archivos están en el directorio /foo/bar
, puede configurar el reloj:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-
-q
habilita el modo silencioso, no hay información deinotifywait
sí mismo -
-m
habilita el modo monitor; de lo contrario, saldrá después del primer evento -
--event modify
, solo estamos interesados enmodify
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.adoc
archivos bajo/foo/bar
directorio
Ahora lo anterior le mostrará el nombre del archivo siempre que se modifique alguno, ahora para ejecutar el comando en el nombre del archivo (asumiendo que el comando toma argumentos a través de STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
También puede configurar una vigilancia recursiva en el directorio, luego deberá usar grep
para filtrar solo los archivos deseados. Aquí configurando el reloj de forma recursiva (-r
) en el directorio /foo/bar
y usando grep
para filtrar solo .adoc
archivos:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '.adoc$' | asciidoctor -q
Al mirar directorios, el especificador de formato de salida %w
se resuelve en el nombre del directorio, por lo que necesitamos %f
para obtener el nombre del archivo. Mientras mira archivos, %f
resolvería vaciar string.
Tenga en cuenta que también puede ejecutar inotifywait
en demonio-d
), también puede crear un script para todo, y / o ejecutarlo en segundo plano, y / o jugar con otras opciones.
Además, puede reemplazar asciidoctor
con cualquier otro comando de su elección, si lo desea.
Cheque man inotifywait
para tener más idea.
Utilizando inotifywait
es el enfoque típico, pero también hay una utilidad separada llamada inotify-hookable
que solo le permite ejecutar un comando cuando cambia un archivo (o directorio):
inotify-hookable -f filename.adoc -c 'asciidoctor -q filename.adoc'
Parece salir después de activar el comando una vez; No veo una opción para la visualización continua, por lo que podría hacer algo como:
while true; do
inotify-hookable -f filename.adoc -c 'asciidoctor -q filename.adoc'
echo "== $(date) : executed, continuing to monitor..."
done
Tenga en cuenta que hay opciones para monitorear varios archivos o un directorio, de forma recursiva, y opciones para ignorar archivos / rutas.
Existen muchas herramientas, especialmente si busca en su repositorio
apt-cache search monitor | grep file
lo que nos da muchas herramientas. Pero no tienes que probarlos porque yo hice eso.
He probado estas herramientas y muchas otras:
- inotificar
- fswatch
- reloj de archivo
- muestra de tela
- archivos cambiados
- entr
Entre estas herramientas, encontré tres útiles y confiables:
- direvent | GNU escrito en C
- iwatch | en Perl
- francotirador
Y de estos tres, sin duda el peor es el mejor.
Es tan útil y confiable de usar que lo he usado para un simple tubería con mis microservicios que tengo.
direvent.conf
archivo para ver
syslog
facility local0;
tag "direvent";
print-priority yes;
watcher
path /var/www/html/ir/jsfun/build/react recursive;
file "*.js";
event write;
command "/usr/bin/xdotool search --onlyvisible --class firefox key F5";
option (stdout, stderr, wait);
Este es solo uno de los archivos de configuración que tengo en el que siempre que hay un cambio para escribir luego se ejecuta este comando, que también podría ser un script bash.
No es necesario usar while
bucle u otras cosas.
características
- viendo un directorio de forma recursiva
- se puede ejecutar en primer plano o antecedentes como un demonio
- portátil. Lo tengo en Ubuntu y en el servidor CentOS7
- informe de nombre de archivo
- expresiones regulares para admitir la coincidencia de archivos
- visualización de archivos múltiples (ver más de un solo tipo de archivo)
- sincronizar la ejecución de los comandos (si tenemos un observador múltiple)
- Manejo de syslog (iniciar sesión en syslog si queremos)
- diseño de archivo de configuración y CLI fácil y bueno para trabajar
Desarrollado por Sergey Poznyakoff.
Instalando
sudo apt install direvent
Pero instalarlo usando su código fuente es bastante fácil y directo, lo que le brinda la última versión (ahora mismo es: 5.1).
- descargar
- documento