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

Gast wer
 2011-07-07 16:10
#150219 #150219
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/perl -w 
# Skript loescht saemtliche Dateien im Ordner, den wir hier eingeben und wenn der Ordner leer ist loescht es den leeren Ordner
# Symlinks werden nicht gelöscht
use strict; 
my $sammel_pfad = "/home/uli/logs";
my $log_datei = "$sammel_pfad/loesch_logfile.txt";
####################################################################################################################
print "In welchen Ordner soll ich alle Dateien loeschen?\n";
my $ordner = <STDIN>; 
chomp $ordner;
print "Danke soll ich dann wirklich alle Dateien in $ordner loeschen?\n"; 

my $entscheidung = <STDIN>;
chomp($entscheidung);
if($entscheidung eq 'j') {

        print "#\n#ALLE Dateien in $ordner  werden gelöscht\n#\n";
}else {
        print "#\n#Breche das Programm ab \n#\n";
        die;
}
############################################################################################################################
print "#\n#\n# Schreibe ab jetzt in Log Datei $log_datei !\n#\n#\n";
open(LOGFILE, '>>', $log_datei") or die "Kann LOG_Datei $log_datei nicht oeffnen: $!\n";

loesche($ordner);

close LOGFILE;

####################################################################################################################
# Funktion loescht nacheinander mittels foreach Schleife datei fuer datei im Ordner 
sub loesche {
        my ($ordner) = @_;    # Funktion loesche wird mit Argument $ordner aufgerufen
        opendir(my $fh, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n";
        my @remove = readdir($fh);
        close($fh);

        foreach my $datei (@remove) {

                # . und .. sollen nicht geloescht werden
                next if ($datei eq "." or $datei eq "..");

                if (-l "$ordner/$datei") {
                        print "Habe einen Link $datei  gefunden loesche diesen nicht\n";
                        next;   # überspinge  rest der schleife überspringen

                }

                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";
                        loesche("$ordner/$datei");
                        print "Funktion rekursiv aufgerufen lösche alle Dateien im Unterverzeichnis $ordner/$datei \n";

                        print LOGFILE "#\n#\n#\n";
                        print LOGFILE  "Habe den Ordner $datei geloescht!\n";

                } else {
                        delete("$ordner/$datei") or die $!;
                        print LOGFILE "#\n#\n#\n";
                        print LOGFILE  "Habe die Datei $datei geloescht!\n";
                }

        }

        # ordner leer?
        if(!glob("$ordner/*")) {
                print "Lösche jetzt den Ordner $ordner  \n";
                # unlink löscht dateien im Ordner
                rmdir($ordner) or die $!; # rmdir löscht leere Verzeichnisse also den leeren Ordner
        } else {
                print "Lösche $ordner nicht, ist nicht leer \n";
        }
}

Last edited: 2011-07-07 16:17:51 +0200 (CEST)

View full thread Verzeichnis rekursiv löschen