Quiero ejecutar automáticamente un script cada vez que se copian los archivos en un directorio en particular. En otras palabras, hay una manera en Linux para "ver" un directorio para los cambios y, a continuación, ejecute algo en respuesta al cambio?
Respuestas
¿Demasiados anuncios?Si tienes la suerte de estar en una basadas en debian, la distribución, apt-get install dnotify
. Otras distribuciones tienen algo similar - buscar por el dnotify
nombre.
dnotify es un programa sencillo basado en Linux kernel 2.4.19+'s dnotify de la API. dnotify puede ejecutar un comando especificado cada vez que el contenido de un determinado los cambios en el directorio. Se ejecuta desde la línea de comandos y toma dos argumentos: uno o más directorios para supervisar y un comando a ejecutar cada vez que un directorio ha cambiado. Opciones de control de lo eventos para desencadenar en: cuando un archivo fue leído en el directorio, cuando uno se crea, borra y así sucesivamente.
Si desea controlar esta dentro de su propio programa, dnotify también es la API que desea utilizar.
Puede ejecutar una secuencia de comandos con el inotify-herramientas, algo como esto. Se va a mirar el directorio de los cambios en los archivos modificados, nuevos archivos, y archivos borrados, a continuación, ejecute la secuencia de comandos.
#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
rsync [options] /home/me/code/ /media/nfs/code/
done
incron es básicamente lo que quiere, creo. Utiliza inotify como el mecanismo de notificación (que, como otros han señalado, que sustituye a la dnotify), pero no requiere de una secuencia de comandos que se ejecuta continuamente, utilizando inotifywait o similar (aunque, obviamente, el incron demonio está funcionando todo el tiempo). Todo el sistema de crontabs' y el usuario 'crontab' se apoyó en una manera similar a la estándar de cron, pero en lugar de especificar veces como disparadores, inotify eventos y archivos/directorio de nombres que se usan.
incron está empaquetado para muchas distribuciones, como Ubuntu y Debian, creo.