2009-02-04 5 views
21

Ähnlich wie eine similar SO question versuche ich ein Verzeichnis auf einer Linux-Box für das Hinzufügen neuer Dateien zu überwachen und möchte sofort diese neuen Dateien verarbeiten, wenn sie ankommen. Irgendwelche Ideen über die beste Art, dies zu implementieren?Monitorverzeichnis für Änderungen

Antwort

23

Betrachten Sie inotify.

Mit inotify können Sie ein Verzeichnis für die Dateierstellung ansehen.

+3

Inotify unterstützt keine rekursive Überwachung von Verzeichnissen. Dies bedeutet, dass für jedes Unterverzeichnis eine separate Inotify-Überwachung erstellt werden muss. Behalte dies im Kopf. – Jason

+0

Siehe auch das Paket [incron] (http://inotify.aiken.cz/?section=incron&page=why) und seine [man page] (http://linux.die.net/man/5/incrontab). Ich bin mir nicht sicher, wie es Unterordner behandelt. – BeowulfNode42

+0

Nein, incron behandelt keine Unterordner, es scheiterte völlig an einer geeigneten "indiegogo" Kampagne, und incron döste 2012 aus. Traurig, aber es erreichte eine Sackgasse. Ich hoffe wirklich, inotify wird bleiben ;-) – Frunsi

0

Eine Lösung, an die ich gedacht habe, ist das Erstellen eines "Datei-Listeners" in Verbindung mit einem Cron-Job. Ich bin nicht verrückt, aber ich denke, es könnte funktionieren.

+0

Wenn Sie sie so schnell wie möglich verarbeiten möchten, gibt es keinen Weg inotify. –

25

Zuerst stellen Sie sicher, inotify-tools in installiert patchen.

Dann nutzen Sie sie wie folgt:

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" 

Alternativ --format statt -c auf inotifywait Verwendung wäre eine Idee.

Nur man inotifywait und man inotifywatch für mehr Infos.

Sie können auch incron verwenden und damit ein Hand- lungsskript aufrufen.

+1

Danke, beste Antwort bisher. Ich war mir sicher, dass es etwas Nettes mit Inotify war und genau das ist es. Es wirkt wie ein Zauber. – akostadinov

Verwandte Themen