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
Verzeichniss auf änderungen überprüfen
-
- User
- Beiträge: 63
- Registriert: Donnerstag 20. November 2003, 13:45
- Wohnort: Frankfurt/M.
- 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
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
-
- 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...
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
fs111
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...
-
- 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
Das wäre dann ja die einfachste Lösung
*vor die Stirn patsch* stimmt ja... Das geht unter jedem OS:
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.
Code: Alles auswählen
import os
time=os.stat(path)[8]
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
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
-
- 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?
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ß
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ß
-
- 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)
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)
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ß
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ß
-
- 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...