xplayer2005

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 43895

Url: https://administrator.de/forum/mit-perl-komplettes-verzeichniss-loeschen-auch-wenn-noch-dateien-drin-sind-unter-xp-43895.html

Ausgedruckt am: 12.05.2025 um 13:05 Uhr

6890
6890 07.11.2006 um 19:25:08 Uhr
Goto Top
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
6890
6890 07.11.2006 um 19:35:14 Uhr
Goto Top
falls du dir keine module installieren kannst, so funktionierts auch face-smile :
#!/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
Biber
Biber 07.11.2006 um 19:38:00 Uhr
Goto Top
@Godlike
Das gefällt mir... nicht so langatmig wie Batch... face-wink

5 Stars mit auf den Weg.

Gruß
Biber
6890
6890 07.11.2006 um 20:07:19 Uhr
Goto Top
@Godlike
Das gefällt mir... nicht so langatmig
wie Batch... face-wink

5 Stars mit auf den Weg.

Gruß
Biber

danke danke...
dafür kann ich leider gar kein batch face-sad
wir könn ja mal so wechselseitiges training machen batch <==> perl face-wink

mfg
xplayer2005
xplayer2005 08.11.2006 um 09:57:12 Uhr
Goto Top
ich bekomm da die meldung...

Permission denied at C:/Documents and Settings/d048045/My Documents/_eclipseWorkspace/test2/225.pl line 15.


line15: rmdir($delpath) or die $!;


sorry hab vergessen zu sagen: ich wil das skript auf xp unde server 2003 ausführen..
6890
6890 08.11.2006 um 15:27:38 Uhr
Goto Top
ich bekomm da die meldung...

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
6890
6890 09.11.2006 um 20:56:11 Uhr
Goto Top
abend,

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
xplayer2005
xplayer2005 14.11.2006 um 11:10:03 Uhr
Goto Top
Danke bis hier her..

allerdings löcht es manchmal nicht alle Unterordner - ab und an bleiben welche stehn.. ich weis aber nicht wiso


hinweis falls jemand das script auch verwenden möchte:

Damit die Logfile funnktioniert muss hier ein > dazu - damit alles angehängt werde kannn

open(LOGFILE,">>$logFile") or die $!;