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.