Come posso rilevare immediatamente quando nuovi file vengono aggiunti a una cartella all'interno di uno script bash? Vorrei che lo script elabori i file non appena vengono creati nella cartella. Esistono metodi oltre alla pianificazione di un processo cron che controlla la presenza di nuovi file ogni minuto circa?
Risposta accettata:
Dovresti considerare l'utilizzo di inotifywait , ad esempio:
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
In Ubuntu inotifywait è fornito da inotify-tools pacchetto. A partire dalla versione 3.13 (attuale in Ubuntu 12.04) inotifywait includerà il nome del file senza l'opzione -f. Potrebbe essere necessario forzare le versioni precedenti. Ciò che è importante notare è che -e opzione per inotifywait è il modo migliore per filtrare gli eventi. Inoltre, il tuo read comando può assegnare l'output posizionale a più variabili che puoi scegliere di utilizzare o ignorare. Non è necessario utilizzare grep/sed/awk per preelaborare l'output.