entr es la herramienta de notificación de archivos más simple y composable que he visto. Su uso está optimizado para mirar archivos en lugar de directorios, pero también puede resolver su caso.
Para detectar y actuar sobre el archivo agregado, combínelo con otras herramientas como por ejemplo make. entrno envía el nombre ni nada de eso, simplemente ejecuta lo que le dijiste que ejecutara.
Para buscar archivos agregados en un directorio:
## entr exits with rc=0 when terminated
## rc=1 when watched files go away or don't exist to begin with
## rc=2 when new files arrive in watched directories
until echo /path/to/directory_to_watch | entr -d do_stuff
do sleep 1; done
Si también desea actuar cuando cambia un archivo existente:
## Here's why it comes in handy that entr exits when new files are added --
## find gets re-run.
until find /path/to/directory_to_watch/ -path /path/to/directory_to_watch/* |
entr -d do_stuff
do sleep 1; done
... y ahí es donde el mecanismo de bucle es útil, ya que la findexpresión se ejecutará nuevamente si se agrega un archivo.
Si desea un mejor manejo de errores y quiere asegurarse de que las cosas solo se ejecuten una vez por archivo agregado / eliminado, las cosas se ponen un poco extrañas, pero para estos casos simples es genial.
EDITAR: si desea hacer esto a nivel de sistema, algo como incron , simplemente agregue el script a su administrador de procesos favorito (como s6 , runit , systemd o sysvinit y omita el ciclo:
#!/bin/bash
exec entr -d do_stuff < <(find /path/to/directory_to_watch/ -path /path/to/directory_to_watch/*)
La execy la sustitución del proceso ( <(...)) son importantes cuando se ejecuta desde un administrador de procesos, para manejar la señalización correctamente (es decir, para sacar el shell del camino).