Thread Verzeichnis rekursiv löschen
(26 answers)
Opened by hcx at 2011-07-06 19:04
Hallo Perlmonks,
vielen Dank für die freundliche Aufnahme hier und die vielen Tipps. Mein letztes Problemchen ein Verzeichnis komplett zu löschen ohne Links anzutasten konnte ich dank euerer Hilfe lösen. Nun möchte ich mein Skript so erweitern dass die Funktion sub loesche () rekursiv aufgerufen wird, wenn im gewählten Verzeichnis $ordner ein Unterverzeichnis gefunden wird. Doch an dem rekursiven Aufruf hänge ich seit Tagen und trotz einiger Threads hier muss ich gestehen ich verstehe immer weniger respektive habe ein solches Brett vorm Hirn, dass ich den Fehler nicht sehe. Soweit es mir erkärt wurde muss ich dazu nach der Zeile Code (perl): (dl
)
if (-d "$ordner/$datei") die Funktion nochmals mit dem Argument $ordner aufrufen doch weder so Code (perl): (dl
)
return loesche($ordner); noch so Code (perl): (dl
)
&loesche($ordner); wird unlink ausgeführt. die Logfile sagt zwar es wäre gelöscht worden doch nichts wird gelöscht. Was mir aufgefallen ist, es wird nur im ersten Unterverzeichnis gearbeitet. Anbei mal die Funktion Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 sub loesche { opendir(DIR, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n"; my @remove = readdir(DIR); close(DIR); my ($ordner) = @_; # Funktion loesche wird mit Argument $ordner aufgerufen foreach my $datei (@remove){ if ("$datei" eq "." or "$datei" eq "..") { # . und .. sollen nicht geloescht werden next; if (-l "$ordner/$datei") { print "Habe einen Link $datei gefunden loesche diesen nicht\n"; next; # überspinge rest der schleife überspringen } }else { print "Lösche jetzt die Datei $ordner/$datei \n"; # unlink löscht dateien im Ordner unlink("$ordner/$datei") or warn "$!"; } if (-d "$ordner/$datei") { print "Habe ein Unterverzeichnis $ordner/$datei gefunden rufe die Funktion rekursiv auf \n"; print "Befinde mich im Unterverzeichnis $ordner/$datei \n"; return loesche($ordner); print "Funktion rekursiv aufgerufen lösche alle Dateien im Unterverzeichnis $ordner/$datei \n"; print LOGFILE "#\n#\n#\n"; print LOGFILE "Habe die Datei $datei geloescht!\n"; } } Was mache ich hier falsch respektive habe ich vergessen? Danke schonmal hcx modedit Editiert von GwenDragon: ein Code- durch Perl-Tag ersetzt, zwecks schönerem Listing Last edited: 2011-07-06 19:31:50 +0200 (CEST) |