Thread Verzeichnis rekursiv löschen (26 answers)
Opened by hcx at 2011-07-06 19:04

hcx
 2011-07-06 19:04
#150198 #150198
User since
2011-07-02
5 Artikel
BenutzerIn
[default_avatar]
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)

View full thread Verzeichnis rekursiv löschen