2010-10-20 9 views
6

Wie überwache ich auf einem Unix-System ein Verzeichnis für Änderungen an Dateien - entweder neue oder geänderte Dateien usw.Monitor Verzeichnis für Änderungen?

Suchen Sie stattdessen nach einem Befehlszeilen-Tool etwas zu installieren.

Antwort

1

können Sie Ihre eigenen dann, wenn Sie keine Werkzeuge installieren möchten. Nur eine Idee. Erstellen Sie eine Basiszeilendatei Ihres Verzeichnisses mit dem Befehl find. Verwenden Sie einen Loop- oder Cron-Job, find das Verzeichnis, das dieselben Parameter verwendet, und überprüfen Sie die neue Datei anhand der Basisliniendatei. Verwenden Sie ein Tool wie diff, um die Unterschiede zu bekommen ..

zB

find /path [other options] >> baseline.txt 
while true #or use a cron job 
do 
    find /path [same options] >> listing.txt 
    diff baseline.txt listing.txt 
    # do processing here... 
    mv listing.txt baseline.txt # update the baseline. 
    sleep 60 
done 
+0

Nur für meine Referenz - gibt es solche Dinge? – siliconpi

+0

über welche "dinge" redest du? Wenn Sie über Werkzeuge sprechen, die für solche Dinge gedacht sind, dann ja. Tools wie tripwire, inotify etc ... – ghostdog74

5

Die meisten Unix-Varianten haben eine API für diese, aber es ist nicht standardisiert. Unter Linux gibt es inotify. In der Befehlszeile können Sie inotifywait verwenden. Anwendungsbeispiel:

inotifywait -m /path/to/dir | while read -r dir event name; do 
    case $event in 
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";; 
    WRITE) echo "The file $name was written to";; 
    DELETE) echo "The file $name was deleted ";; 
    esac 
done 

Inotify Ereignistypen werden oft nicht genau das, was Sie versuchen zu bemerken (z OPEN ist sehr breit), so fühlen sich nicht schlecht, wenn Sie Ihre eigene Datei überprüft am Ende macht.

+0

Dies ist die richtige Antwort, weil es zeigt, wie eine API für die Überwachung der Änderungen verwendet wird. Die Antwort von ghostdog74 könnte funktionieren, aber es kostet Ressourcen. Was ist, wenn Sie 1000 Verzeichnisse überwachen müssen? –

+0

Hinweis: Diese Antwort funktioniert nur, wenn Sie den Linux-Kernel 2.6.13 oder höher verwenden. Ich bin mir nicht sicher über andere Unicies. –

+0

Könntest du bitte klarstellen, was * während * liest -r dir den Ereignisnamen; ** do *? – arod