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
#!/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; } 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 { opendir(DIR, $ordner)or die "$!"; 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 { unlink("$ordner/$datei"); # unlink löscht dateien im Ordner print LOGFILE "Hallo\n"; print LOGFILE "#\n#\n#\n"; print LOGFILE "Habe die Datei $datei geloescht!\n"; } rmdir($ordner) or die $!; # rmdir löscht leere Verzeichnisse also den leeren Ordner }
opendir(DIR, $ordner)or die "$!";
opendir(DIR, $ordner)or die "Fehler: Kann Ordner '$ordner' kann nicht oeffnen: $!\n";
Guest hcxGebe ich den Pfad für $ordner so an: /home/hcx/test/a funktioniert es
so hingegen $ordner ~/test/a Verzeichnis nicht gefunden.
1 2 3 4 5 6 7
use Cwd; my $cwd = Cwd::getcwd(); print "CWD: $cwd\n"; my $pfad='nur/ein/test'; $pfad=Cwd::abs_path($pfad); print "PFAD: $pfad\n";
1 2 3 4 5 6
use File::Spec; my $pfad='nur/ein/test'; $pfad=File::Spec->rel2abs($dir); print "PFAD: $pfad\n";
my @remove = grep { $_ !~ m/\.{1,2}/ } readdir($dfh);
2011-07-04T09:43:00 haviDie "Ordner" . und .. kannst du gleich beim readdir ausschließen:
Code (perl): (dl )my @remove = grep { $_ !~ m/\.{1,2}/ } readdir($dfh);
my @remove = grep { $_ !~ m/^\.{1,2}$/ } readdir($dfh);
2011-07-04T09:43:00 haviDie "Ordner" . und .. kannst du gleich beim readdir ausschließen:
Code (perl): (dl )my @remove = grep { $_ !~ m/\.{1,2}/ } readdir($dfh);
Guest hcxich muss das opendir und closedir noch vor den Aufruf der sub loesche setzen und es in der sub Definition nochmals an den Anfang schreiben.