if (-d "$ordner/$datei")
return loesche($ordner);
&loesche($ordner);
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"; } }
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
# Funktion loescht nacheinander mittels foreach Schleife datei fuer datei im Ordner
2 sub loesche {
3 my ($ordner) = @_; # Funktion loesche wird mit Argument $ordner aufgerufen
4 opendir(DIR, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n";
5 my @remove = readdir(DIR);
6 close(DIR);
7
8 foreach my $datei (@remove){
9 if ($datei eq "." or $datei eq "..") { # . und .. sollen nicht geloescht werden
10 next;
11 elseif (-l "$ordner/$datei") {
12 print "Habe einen Link $datei gefunden loesche diesen nicht\n";
13 next; # überspinge rest der schleife überspringen
14
15 elseif (-d "$ordner/$datei") {
16 print "Habe ein Unterverzeichnis $ordner/$datei gefunden rufe die Funktion rekursiv auf \n";
17 print "Befinde mich im Unterverzeichnis $ordner/$datei \n";
18 &loesche($ordner);
19 print "Funktion rekursiv aufgerufen lösche alle Dateien im Unterverzeichnis $ordner/$datei \n";
20
21 print LOGFILE "#\n#\n#\n";
22 print LOGFILE "Habe die Datei $datei geloescht!\n";
23
24 }
25
26 }
27 } else {
28 print "Lösche jetzt die Datei $ordner/$datei \n";
29 # unlink löscht dateien im Ordner
30 unlink("$ordner/$datei") or warn "$!";
31 }
32 # rmdir($ordner) or die $!; # rmdir löscht leere Verzeichnisse also den leeren Ordner
33
}
1
2
Habe ein Unterverzeichnis /home/hcx/test/a gefunden rufe die Funktion rekursiv auf
Befinde mich im Unterverzeichnis /home/hcx/test/a
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
}
}
}
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"; } }
1 2 3 4 5 6 7 8 9 10 11
use File::Find::Rule; my $dir = '/path/'; my @files = File::Find::Rule->file->in( $dir ); my @no_links = grep{ !-l $_ }@files; unlink @no_links; my @dirs = File::Find::Rule->dir->in( $dir ); rmdir $_ for @dirs;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use warnings;
use strict;
use File::Find::Rule::directory;
print" Welches Verzeichnis soll ich löschen? \n";
my $directory = <STDIN>;
chomp $directory;
my @files = File::Find::Rule->file->in( $directory );
my @no_links = grep{ !-l $_ }@files;
unlink @no_links;
my @dirs = File::Find::Rule->dir->in( $directory );
rmdir $_ for @dirs;
1
2
Can't locate File/Find/Rule/directory.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./verzeichnis_loeschen.pl line 4.
BEGIN failed--compilation aborted at ./verzeichnis_loeschen.pl line 4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl use warnings; use strict; use File::Find::Rule; print" Welches Verzeichnis soll ich löschen? \n"; my $ordner = <STDIN>; chomp $ordner; # finde alle Dateien im Ordner "$ordner" my @files = File::Find::Rule->file->in( $ordner ); # verwerfe alle Dateien in "@files" die Softlinks (ln -s ...) sind my @no_links = grep{ !-l $_ }@files; # entferne alle Dateien in "@no_links" unlink @no_links; # finde alle Ordner im Ordner "$ordner" my @dirs = File::Find::Rule->directory->in( $ordner ); # entferne nacheinander alle Ordner, die in "@dirs" stehen. rmdir $_ for @dirs;
1
2
3
4
5
6
elsif (-d "$ordner/$datei") {
# print "Befinde mich im Unterverzeichnis $ordner/$datei \n";
# print "Habe ein Unterverzeichnis $ordner/$datei gefunden rufe die Funktion rekursiv auf \n";
# unlink("$ordner/$datei") or warn "$!";
# print "Funktion rekursiv aufgerufen lösche alle Dateien im Unterverzeichnis $ordner/$datei \n";
# &loesche($ordner);
Deep recursion on subroutine "main::loesche
if(-d $pfad) { ordner($pfad); }
1
2
3
4
5
6
7
8
9
10
11
[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]
1 2 3
opendir my $dir, $ordner or die "Cannot opendir '$ordner': $!\n"; my @test = grep { ! /\A\.\.?\z/ } readdir $dir; closedir $dir;