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

Gast hcx
 2011-07-07 15:20
#150216 #150216
Das war nur die Funktion.

Mein Skript verwendet sowohl use strict; als auch warnings
doch es werden keine Warnungen ausgeworfen. Lediglich syntax-errors wenn ich elseif verwende.

Das Skript sieht so aus:

Code: (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
#!/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;
}
############################################################################################################################
opendir(DIR, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n";
my @remove = readdir(DIR);
close(DIR);
############################################################################################################################
open(LOGFILE, $log_datei) or die "Kann LOG_Datei $log_datei nicht oeffnen: $!\n";
&loesche($ordner);

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";
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(DIR, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n";
my @remove = readdir(DIR);
close(DIR);

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

} 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);
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";

} else {
print "Lösche jetzt die Datei $ordner/$datei \n";
# unlink löscht dateien im Ordner

# rmdir($ordner) or die $!; # rmdir löscht leere Verzeichnisse also den leeren Ordner

}

}

}


rufe ich es auf erhalte ich nur diese print Ausgabe:

Habe ein Unterverzeichnis /home/uli/test/a gefunden rufe die Funktion rekursiv auf
Befinde mich im Unterverzeichnis /home/uli/test/a

der unlink Befehl wird nicht ausgeführt.

Gruss

hcx

Last edited: 2011-07-07 15:25:10 +0200 (CEST)

View full thread Verzeichnis rekursiv löschen