mit perl komplettes Verzeichniss löschen (auch wenn noch dateien drin sind) unter xp
hallo,
gibt es einen perl Befehl um verzeichnisse komplett inc. untervereichnissen zu löschen.
nenn nein: wie kann ich das umsetzen?
bedanke mich im vorraus
gibt es einen perl Befehl um verzeichnisse komplett inc. untervereichnissen zu löschen.
nenn nein: wie kann ich das umsetzen?
bedanke mich im vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 43895
Url: https://administrator.de/contentid/43895
Ausgedruckt am: 23.11.2024 um 20:11 Uhr
8 Kommentare
Neuester Kommentar
ja hallo,
dafür gibt es das modul File::Remove, kannste dir ja mal anschauen:
http://search.cpan.org/~adamk/File-Remove-0.34/lib/File/Remove.pm
mfg godlike P
dafür gibt es das modul File::Remove, kannste dir ja mal anschauen:
http://search.cpan.org/~adamk/File-Remove-0.34/lib/File/Remove.pm
mfg godlike P
falls du dir keine module installieren kannst, so funktionierts auch :
mfg godlike P
#!/usr/local/bin/perl
use strict;
my $dir="test";
opendir(DIR,$dir)or die "$!";
my @remove = readdir(DIR);
close(DIR);
foreach(@remove){
unlink("$dir/$_");
}
rmdir($dir) or die $!;
mfg godlike P
danke danke...
dafür kann ich leider gar kein batch
wir könn ja mal so wechselseitiges training machen batch <==> perl
mfg
ich bekomm da die meldung...
Permission denied at C:/Documents and
Settings/d048045/My
Documents/_eclipseWorkspace/test2/225.pl line
15.
Permission denied at C:/Documents and
Settings/d048045/My
Documents/_eclipseWorkspace/test2/225.pl line
15.
als welcher benutzer führst du das script aus??
denn das heisst das dir das löschen mangels rechten verwehrt wurde!!
mfg godlike P
abend,
hab mal ein script geschrieben welches
ordner für ordner durchgeht und alte
dateien und ordner löscht, kommentiert
ist es auch:
falls fragen sind bitte melden
mfg godlike P
hab mal ein script geschrieben welches
ordner für ordner durchgeht und alte
dateien und ordner löscht, kommentiert
ist es auch:
#!c:/perl/bin/perl
# das sind module für strictes programmieren und warnungen
use strict;
use warnings;
# ein paar konstanten
use constant LOESCHEN => 0;
use constant BEHALTEN => 1;
use constant DELETED => -1;
# dein ordner wo drinne gelöscht werden soll
my $dir = "D:/SCRIPTE/ADMINISTRATOR/test1";
# das log file
my $logFile = "$dir/log.txt";
my @allFiles;
my %allFiles;
my $lastMod;
# zeitpunkt minus 5 tage also alt die dateien und ordner höchstens sein dürfen
my $back5days = (time()-(86400*5));
# hier springt er in die sub cd
&cd($dir);
# alle dateien durchgehen und schauen ob sie älter als 5 tage sind
# ordner werden automatisch auf löschen gesetzt
foreach(@allFiles) {
$lastMod = (stat($_))[9];
$allFiles{$_} = BEHALTEN if(($lastMod - $back5days) > 0 && -f $_);
$allFiles{$_} = LOESCHEN if(($lastMod - $back5days) < 0 && -f $_);
$allFiles{$_} = LOESCHEN if -d $_;
}
# die dateien löschen die älter als 5 tage sind
foreach(keys(%allFiles)) {
if ($allFiles{$_} == LOESCHEN && -f $_) {
$allFiles{$_} = DELETED if unlink($_);
}
}
# die ordner löschen die leer sind
# rmdir löscht nur leere ordner
foreach(keys(%allFiles)) {
if ($allFiles{$_} == LOESCHEN && -d $_) {
$allFiles{$_} = DELETED if rmdir($_);
}
}
# den ganzen spass in ne log datei schreiben
&loggen();
# logdatei schreiben
sub loggen {
open(LOGFILE,">$logFile") or die $!;
foreach(keys(%allFiles)) {
print LOGFILE $_," --> ";
print LOGFILE "File/Directory wurde geloescht...\n\n" if $allFiles{$_} == DELETED;
print LOGFILE "File/Directory ist aktuell...\n\n" if $allFiles{$_} == BEHALTEN;
print LOGFILE "File/Directory wurde nicht geloescht...\n\n" if $allFiles{$_} == LOESCHEN;
}
close(LOGFILE);
}
# diese recursive funktion geht in jeden ordner liest den inhalt aus und
# falls im inhalt ein ordner ist geht er auch in diesen und soweiter (recursiv halt)
# alle pfade von dateien und ordnern werden in ein array geschrieben damit
# man sie später löschen oder behalten kann
sub cd {
my $dir = shift;
my $base = $dir."/";
my @currDir;
opendir(DIR,$dir) or die $!;
@currDir=readdir(DIR);
close(DIR);
foreach(@currDir) {
next if $_ eq '.' or $_ eq '..';
&cd($base.$_) if(-d $base.$_);
push(@allFiles,$base.$_);
}
}
falls fragen sind bitte melden
mfg godlike P