Analogamente a similar SO question, sto provando a monitorare una directory su una macchina Linux per l'aggiunta di nuovi file e vorrei elaborare immediatamente questi nuovi file quando arrivano. Qualche idea sul modo migliore per implementarlo?Monitorare la directory delle modifiche
risposta
Vedere inotify.
Con inotify è possibile visualizzare una directory per la creazione di file.
Una soluzione a cui ho pensato è creare un "listener di file" abbinato a un cron job. Non sono pazzo di questo, ma penso che potrebbe funzionare.
Se si desidera elaborarli al più presto, non vi è alcun modo per inotify. –
fschange (Linux File System Change Notification) è una soluzione perfetta, ma ha bisogno di patch per il kernel
Nota l'avvertimento nella parte superiore dell'articolo, '' 'fschange è un'alternativa all'inotify che [è stato] implementato prima che inotify diventasse parte del kernel Linux mainline. '' ' – TechplexEngineer
Prima di tutto assicuratevi inotify-tools
in installato.
poi usarli come questo:
logOfChanges="/tmp/changes.log.csv" # Set your file name here.
# Lock and load
inotifywait -mrcq $DIR > "$logOfChanges" &
IN_PID=$$
# Do your stuff here
...
# Kill and analyze
kill $IN_PID
while read entry; do
# Split your CSV, but beware that file names may contain spaces too.
# Just look up how to parse CSV with bash. :)
path=...
event=...
... # Other stuff like time stamps?
# Depending on the event…
case "$event" in
SOME_EVENT) myHandlingCode path ;;
...
*) myDefaultHandlingCode path ;;
done < "$logOfChanges"
alternativa, utilizzando --format
anziché -c
su inotifywait
sarebbe un'idea.
Solo man inotifywait
e man inotifywatch
per ulteriori informazioni.
È anche possibile utilizzare incron
e utilizzarlo per chiamare uno script di gestione.
Grazie, la migliore risposta finora. Ero sicuro che c'era qualcosa di carino con inotify e questo è esattamente. Funziona come un incantesimo. – akostadinov
Inotify non supporta la visualizzazione ricorsiva delle directory, ovvero è necessario creare un orologio inotify separato per ogni sottodirectory. Tienilo a mente. – Jason
Vedere anche il pacchetto chiamato [incron] (http://inotify.aiken.cz/?section=incron&page=why) e la sua [man page] (http://linux.die.net/man/5/incrontab). Non sono sicuro di come gestisca le sottocartelle. – BeowulfNode42
No, incron non gestisce le sottocartelle, ha fallito completamente in una campagna "indiegogo" appropriata, e incron si è assopita nel 2012. Triste, ma ha raggiunto un vicolo cieco. Spero davvero, inotify rimarrà ;-) – Frunsi