Verzeichniss auf änderungen überprüfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Hiho,

ich sucher gerade nach einer Möglichkeit ein komplettes Verzeichniss auf Änderungen zu überprüfen. Gibt es da eine schnelle Möglichkeit (irgend eine Hash-Summer für ein komplettes Verzeichniss) oder muss ich jede Datei des Verzeichnisses einzeln auslesen und überprüfen ob sie geändert wurde?

Grüsse

Marc
Benutzeravatar
strogon14
User
Beiträge: 58
Registriert: Sonntag 23. Februar 2003, 19:34
Wohnort: Köln
Kontaktdaten:

Auf welchem Betriebssystem? Unter Linux gibt es mittlerweile Entwicklungen, bei denen man sich mittels eines Daemons über Änderungen an Dateien informieren lassen kann.

Bei Windows habe ich keine Ahnung, meine aber gehört zu haben, dass es da auch einen 'directoty-update-notification' Mechanismus gibt.

Hast Du schon in der Python-Newsgroup gegoogelt?

Chris
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Im Moment unter Win, will das Ding aber auch unter linux laufen lassen können. Ich meine nicht dauerhaft überwachen. Ok, ich hol etwas weiter aus. Ich will eine Datenbank mit allen Dateien im Verzeichnissbaum (um die 5000-6000) basteln. Diese Datenbank soll, wenn sie einmal angelegt ist möglichst effektiv auf den neusten Stand gebracht werden, wenn sich in der Zeit, in der das Script nicht lief, Dateien verändetr haben. Und statt jedes mal 6000 Dateien abzugleichen wäre es weit einfacher einfach erst mal zu testen ist Verzeichniss X verändert worden, wenn nein kann ich mir alle Dateien im Verzeichniss X sparen...
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

DU kannst ja einen Thread schreiben, der die Größe des Verzeichnisses berechnet, dann eine Zeit lang schläft, wieder prüft, und falls es sich geändert hat, eine MEldung ausgibt.

fs111
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Die Größe des Verzeichnisses ist nicht gut zu beobachten... Schließlich kann ich in einer Datei auch einfach einen Buchstaben gegen einen anderen ersetzten und die Datei bleibt genausogroß (oder gleich ne andere Datei gleicher Größe anstelle der alten reinhauen...). Ich würde mir für jede Datei und die Inhaltsangabe des Verzeichnisses (für die Datei und Verzeichnisnamen) ne MD5 - Checksumme machen und die dann vergleichen. Aber das hieße, jede einzelne Datei durchgehen und ist bei großen Verz. recht rechenaufwändig...
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Könnte ich über 'geändert am' gehen? habe das gerade mal in Windows 2000 ausprobiert. Wenn ich in einem Ordner was ändere, ändert sich auch die Angabe 'geändert am' für den entsprechenden Ordner. Funktioniert das unter älteren Windows Versionen und unter Linux auch?
Das wäre dann ja die einfachste Lösung
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

*vor die Stirn patsch* stimmt ja... Das geht unter jedem OS:

Code: Alles auswählen

import os
time=os.stat(path)[8]
Das ist die Zeit der letzten Änderung in Sekunden seit der letzten Epoche. Damit dürftest du was anfangen können, denn das geht auch gleich für dein Verz. :wink:
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Es gibt keine platformübergreidende Lösung!

Mit dem Linux-Daemon hatte ich letztens großen Ärger.
Das mit dem Änderungsdatum klappt auch nur für das übergeordnete Verzeichnis, denn dort wird was an den Nodes geändert. Ab der 2. Ebene sieht man aber nichts mehr
-> alle Verzeichnisse regelmäßig und rekursiv nach Veränderungsdatum prüfen.

cu beyond
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Hmm... jetzt suche ich noch ein paar Optimierungsmöglichkeiten. Ich nutze zur Zeit os.path.walk um mich durch die Verzeichnisse zu hangeln. Das ganze ist zwar jetzt schon schneller, als alle Dateien zu prüfen, aber imme rnoch relativ langsam. Gibt es irgend eine Funktion, die das selbe macht wie das os.path.walk, dabei aber nur Verzeichnisse berücksichtigt? ODer sonst noch irgend eine Möglichkeit die Geschwindigkeit noch etwas zu erhöhen?
gast

Hi,
scheinbar verstehe ich nicht was du genau willst, wenn du eine datenbank hast und dort wird etwas geändert dann ist sie doch auf dem neusten stand. jeder andere zugriff ist doch völlig überflüssig, wenn ein eintrag sich ändert ist das aus meiner sicht kein db problem sondern ein frontend problem für die db.

vielleicht verstehe ich aber alles falsch.

Viele wege führen nach ...
Gruß
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Hiho gast,

das was in der Datenbank steht soll ja wiedergeben was im Moment auf der Platte Sache ist. Und wenn ich nun unter den 5000 Dateien eine neue hinzufüge, dann soll das auch beim nächsten Ausführen der DB erkannt werden und dazu muss ich halt scannen was auf der Platte im Moment los ist (und das möglichst effektiv)
gast

ja dann lag ich doch richtig,
also wenn ich das jetzt machen würde würde ich mir script schreiben welches die daten auf die platte kopiert, welches dann im selben moment ein update der db durchführt, alles andere wäre viel zu aufwendig wenn du eine ordentliche geschwindigkeit haben willst, allerdings hängt es jetzt noch davon ab wo die dateien herkommen,
z.B Kazaa
du hast 100 Dateien die du saugst. diese werden abgelegt in irgenein ordner der bei kazaa festgelegt wurde,
1. ein script prüft in regelmäßigen zeitabständen ob neue dateien vorhanden sind
2. wenn dateien vorhanden verschiebe mit script 2 alle dateien in einem anderen ordner und äender einträge in db

das war das erste was mir eingefallen ist es kann natürlich sein das dieser weg bei dir gar nicht funzt
Gruß
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

Nein, das geht leider nicht... Dazu ist da zuviel Fluktuation in meinem Archiv... mal schmeisse ich welche raus, mal merke ich das welche falsch einsortiert sind und sortiere um usw... Das muss schon direkt von der Platte abgeglichen werden...
Antworten