¿Cómo puedo detectar inmediatamente cuando se agregan nuevos archivos a una carpeta dentro de un script bash? Me gustaría que la secuencia de comandos procese los archivos tan pronto como se creen en la carpeta. ¿Hay algún método además de programar un trabajo cron que busque nuevos archivos cada minuto más o menos?
Respuesta aceptada:
Debería considerar usar inotifywait
, como ejemplo:
inotifywait -m /path -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'"
# do something with the file
done
En Ubuntu inotifywait
es proporcionado por inotify-tools
paquete. A partir de la versión 3.13 (actual en Ubuntu 12.04) inotifywait
incluirá el nombre del archivo sin la opción -f. Las versiones anteriores pueden necesitar ser forzadas. Lo que es importante tener en cuenta es que el -e
opción para inotifywait
es la mejor manera de filtrar eventos. Además, su read
El comando puede asignar la salida posicional en múltiples variables que puede elegir usar o ignorar. No es necesario usar grep/sed/awk para preprocesar la salida.