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

topeg
 2011-07-08 17:17
#150245 #150245
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Wenn du neu in der Programmierung bist schreibe dir als ausführliche Stichpunkte auf was du machen willst. Schritt für Schritt:

Erst ganz grob:
Es wird eine Funktion gebraucht, die Ordner und Dateien löscht sofern sie keine Links enthalten oder sind.

genauer:
Erstelle eine Funktion, die einen Ordner öffnen den Inhalt durchgeht und Löscht wenn es kein Link ist, danach soll der Ordner gelöscht werden.

noch mehr Details:
Erstelle eine Funktion. Öffne den Ordner und lies alle Namen ein, prüfe die Namen ob Ordner Datei oder Link. Wenn es ein Link ist, ignoriere diesen. Wenn es ein Ordner ist rufe die Funktion selber mit dem Pfad auf. Wenn es eine Datei ist, dann lösche sie. Sollte danach der Ordner leer sein, dann lösche den Ordner.

dann machst du eine genaue Liste
Definiere eine Funktion "ordner" übergeben wird ein Pfad zu einem Verzeichnis
  • Nimm den gewünschten Verzeichnis-Pfad
  • öffne das Verzeichnis
  • lese alle Namen in eine Liste
  • gehe die Liste durch und teste:
    • erzeuge aus Name und Ordner einen Pfad, der auf Datei, Ordner oder Link zeigt.
    • wenn der Pfad ein Link ist, dann Ignoriere diesen Pfad
    • wenn der Pfad ein Ordner ist rufe die Funktion "ordner" mit diesem Pfad auf
    • wenn der Pfad eine Datei ist, dann lösche diese
  • Wenn der Ordner leer ist, lösche ihn


Nun überlegt du dir wie du jeden einzelnen dieser Schritte entweder weiter zerlegen oder direkt in perl formulieren kannst. Dazu kannst du auch Im Internet oder hier auf der Seite anderer Leute Perlcode anschauen oder explizit nach dem Problem im Internet suchen.

sub ordner {
  • my $ordner=shift(@_);
  • opendir(my $dh, $ordner) or die("ERROR OPEN $ordner ($!)\n")
  • my @liste=readdir($dh);
  • closedir($dh); <== eingefügt weil perl das verlangt
  • for my $name (@liste){
    • my $pfad="$ordner/$name"; passenden Pfad erzeugen
    • if(-l $pfad) { next; }
    • if(-d $pfad) { ordner($pfad); }
    • if(-f $pfad) { unlink($pfad); }
    } Ende der for-Schleife
  • Wenn der Ordner leer ist rmdir($ordner)
}

Zu Anfang macht das noch viel Arbeit. Wenn man das aber drei oder vier mal gemacht hat kommt man ein Gefühl dafür worauf man achten muss, und kann den Code auch direkt schreiben.

Wenn du die Aufgabe erst sauber aufschreibst und dann Programmierst, wirst du weniger leicht über die ungewohnte Perlsyntax stolpern und Denkfehler machen, da du schon ganz genau weißt was du eigentlich machen willst.

View full thread Verzeichnis rekursiv löschen