Hallo topeq,
nein 100 Rekursionen sollte es nicht geben doch davon abgesehen sieht es so aus als ende es dennoch in einer endlosen Rekursion.
Hier mal wie gewünschr der komplette Code.
[b]#!/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";
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
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;
sub loesche {
my $ordner = shift(@_);
opendir(DIR, $ordner) or die("ERROR OPEN $ordner ($!)\n");
my @remove = readdir(DIR);
closedir(DIR);
for my $datei (@remove){
my $pfad="$ordner/$datei";
if ($pfad eq "." or $datei eq "..") { next; } # . und .. sollen nicht geloescht werden
if(-l $pfad) { next; } # Wenn die Datei ein systemlink ist, nicht löschen Schleife überspringen
if(-d $pfad) { loesche($pfad); } # Wenn die Datei ein Unterverzeichnis ist löschen
if(-f $pfad) { unlink($pfad); } # Wenn es eine datei ist löschen
} # Ende der for Schleife
# Überprüfen, ob sich noch Dateien im Unterverzeichnis befinden
my $datei;
opendir(DIR, "$ordner/$datei");
my @test = grep { "$ordner/$datei" ne "." && "$ordner/$datei" ne ".." } readdir(DIR);
closedir DIR;
if(@test)
{
print "Verzeichnis enthält noch Dateien, lösche es nicht \n";
} else {
rmdir($ordner);
} # Ende sub
[/b]
Gruss
hcx
Last edited: 2011-07-09 00:50:30 +0200 (CEST)