¿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.