
Inspirado poresta respuesta de superusuarioHe escrito el siguiente copy_library.sh
script, guardado en la misma carpeta que un archivo llamado library.bib
:
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
Si inicio este script manualmente y ./copy_library.sh
el proceso sale después de la primera copia (que funciona correctamente):
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
y no se rastrean más cambios. Estoy seguro de que debo hacer algo con este script para que se ejecute continuamente "en segundo plano" sin tener que iniciarlo manualmente.
¿Pero que?
Respuesta1
Desde la inotifywait
página de manual:
inotifywait espera eficientemente cambios en los archivos usando la interfaz inotify(7) de Linux. Es adecuado para esperar cambios en archivos desde scripts de shell. Puede salir una vez que ocurre un evento o ejecutar y generar eventos continuamente a medida que ocurren.
y
-m, --monitor En lugar de salir después de recibir un solo evento, ejecútelo indefinidamente. El comportamiento predeterminado es salir después de que ocurra el primer evento.
EDITAR: Tengo un registro, que se agrega cada 15 segundos. El siguiente script ejecuta el bucle while one para cada línea generada por inotifyread:
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
En tu caso, tienes que cambiar el evento (modificar) a close_write, por supuesto.