Schrift
[thread]7358[/thread]

Verzeichnis überwachen: ob eine Datei neu / gelöscht / umbenannt

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Optalamia
 2005-10-16 19:23
#58902 #58902
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich möchte ein Verzeichnis überwachen.
Und zwar soll in kurzen Abständen (0.2s .. 1s) geprüft werden, ob
- eine neue Datei hinzugekommen ist
- eine Datei geändert wurde
- eine Datei gelöscht wurde

Ich schrieb ein Skript, das das Verzeichnis ausliest, sortiert und mit dem vorherigen Stand dateiweise vergleicht.
Problem: bei sehr vielen Dateien (ca. 1000) wurde die CPU merklich belastet.

Mein zweites Skript las das Verzeichnis aus und verglich nur, ob sich die Anzahl geändert hat. Das belastete kaum noch die CPU, aber es wurde nicht mehr erkannt, ob eine Datei umbenannt wurde.

Ob es effektiver wäre, eine (einfache) Quersumme für jede Datei zu berechnen und diese zu addieren?
(Statt die Dateien zu sortieren und einzeln zu vergleichen.)

Fällt Euch eine Idee ein, wie man das noch überprüfen kann?
Es muß nur ein Bool-Wert übergeben werden. (Änderung: ja/nein)

Mein Grundansatz zum Auslesen ist folgender.
Ob es eine andere Möglichkeit gibt, weiß ich nicht.
Code: (dl )
1
2
3
4
  use Cwd;
opendir(DIR, cwd);
my @dirlist = readdir(DIR);
closedir(DIR);
nepos
 2005-10-16 19:32
#58903 #58903
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, nur so ne Idee, aber wenn du einfach nen Hash ueber die Ausgabe von ls -l machst?
Der aendert sich sobald sich da was aendert und mehr willst du ja nicht ;)
nepos
 2005-10-16 19:44
#58904 #58904
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hab das grade mal als Minishellskript ausprobiert, das ganze braucht bei mir auf nem PII-266 kaum CPU.
Und das bei knapp ueber 900 Dateien.
esskar
 2005-10-16 20:10
#58905 #58905
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
unter windows gibt es für sowas events (pro verzeichnis) FindFirstChangeNotification... keine ahnung ob es das auch *nix unterstützt
Optalamia
 2005-10-16 20:14
#58906 #58906
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ach ich vergaß: Ich arbeite unter WinXP. Da gibt es keinen ls-Befehl.
Aber das kann ich ja auch über den obigen Code realisieren.

Ich hätte dazu 2 Ideen:

- ord() und subst()
- pack()

pack() kann man auch auf Arrays anwenden und soll sehr mächtig sein. Ich weiß aber nicht, welche der vielen Optionen ich für eine Quersumme verwenden soll.
Es sollte kein hoher Rechenaufwand sein.
Es muß auch nicht per unpack() zurückverwandelbar sein.

http://wi2x31.informatik.uni-wuerzburg.de/selfhtm....tm#pack
Ich gebe zu, die ganzen Optionen habe ich noch nicht so begriffen. Erscheint mir ein bischen kompliziert.
Optalamia
 2005-10-16 20:25
#58907 #58907
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
FindFirstChangeNotification klingt interessant.
Allerdings weiß ich nicht, in welchem zusammenhang man das benutzt.
Sieht weniger nach Perl-Code aus.
Unt meine Schell kennt kein HANDLE FindFirstChangeNotification
esskar
 2005-10-16 20:49
#58908 #58908
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
man müsste FindFirstChangeNotification eben über Win32::API aufrufen...
Strat
 2005-10-16 22:21
#58909 #58909
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
oder: Win32::ChangeNotify
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Optalamia
 2005-10-17 00:15
#58910 #58910
User since
2003-10-01
50 Artikel
BenutzerIn
[Homepage] [default_avatar]
keine Ahnung, wie man etwas über Win32::API aufruft
aber Win32::ChangeNotify klingt interessant (-;
esskar
 2005-10-17 01:53
#58911 #58911
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Strat,16.10.2005, 20:21]oder: Win32::ChangeNotify[/quote]
das ist es wohl.
muss halt nur wissen, wie das modul heißt
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-10-16 19:23.