gelöst Verzeichnisse älter als 5 Tage komplett mit Unterverzeichnissen mit PERL Skript löschen
xplayer2005 (Level 1) - Jetzt verbinden
07.11.2006, aktualisiert 09.11.2006, 8853 Aufrufe, 2 Kommentare
Hallo,
ich bin gerade dabei mir ein Perl Skript zu schreiben mit dem ich ganze Verzeichnisse inc. Inhalt mit einem bestimmten alter löschen kann.
Aan dieser stelle möche ich darauf hinweisen das ich ein Perlneuling bin, hab mir zwar ein 160 Seiten ebook durchgelesen und verstanden, finde aber auf viele Fragen keine Antworten auch nicht bei meinem Freund dem Google...
Ich würde mich sehr freuen wenn sich jemand findet der mir ein bisschen unter die Arme greift
Im Moment hänge ich gerade an dem Probmel mir den Verzeichnissnamen geben zu lassen..
volgendes Scenario:
ich habe einen Test Ordner c:\zul -- in diesem befinden sich 3 weitere Ordner mit jeweils 3 Dateien (XP SYSTEM)
nach ausführung des Skriptes sollen alle 3 Unterordner sowie alle 9 Dateien gelöscht sein
mit:
my @alter = (glob "C:/zul/folder1/*.*");
for (my $i=0; $i < @alter ; $i++){
print "$alter[$i]\n";
};
bekomme ich die Dateinamen - aber wie die Verzeichnissnamen?
bedanke mich im vorraus - sicherlich bin ich auch an Vorschlägen zu einer Komplettlösung interessiert.
Bitte keine Hinweise wie: nehm doch delage32.exe oder machs lieber mir ner anderen Sprache..
ich bin gerade dabei mir ein Perl Skript zu schreiben mit dem ich ganze Verzeichnisse inc. Inhalt mit einem bestimmten alter löschen kann.
Aan dieser stelle möche ich darauf hinweisen das ich ein Perlneuling bin, hab mir zwar ein 160 Seiten ebook durchgelesen und verstanden, finde aber auf viele Fragen keine Antworten auch nicht bei meinem Freund dem Google...
Ich würde mich sehr freuen wenn sich jemand findet der mir ein bisschen unter die Arme greift
Im Moment hänge ich gerade an dem Probmel mir den Verzeichnissnamen geben zu lassen..
volgendes Scenario:
ich habe einen Test Ordner c:\zul -- in diesem befinden sich 3 weitere Ordner mit jeweils 3 Dateien (XP SYSTEM)
nach ausführung des Skriptes sollen alle 3 Unterordner sowie alle 9 Dateien gelöscht sein
mit:
my @alter = (glob "C:/zul/folder1/*.*");
for (my $i=0; $i < @alter ; $i++){
print "$alter[$i]\n";
};
bekomme ich die Dateinamen - aber wie die Verzeichnissnamen?
bedanke mich im vorraus - sicherlich bin ich auch an Vorschlägen zu einer Komplettlösung interessiert.
Bitte keine Hinweise wie: nehm doch delage32.exe oder machs lieber mir ner anderen Sprache..
2 Antworten
- LÖSUNG xplayer2005 schreibt am 07.11.2006 um 10:57:46 Uhr
- LÖSUNG 6890 schreibt am 09.11.2006 um 20:35:31 Uhr
LÖSUNG 07.11.2006 um 10:57 Uhr
ok verzeichnisse empfangen ist ganz einfach
my @alter = (glob "C:/zul/*");
for (my $i=0; $i < @alter ; $i++){
print "$alter[$i]\n";
};
einfach das "*.* in nur "*" gewandelt.. dann werden alle verzeichnisse anezeigt.
aber wie mache ich jetz weiter?
my @alter = (glob "C:/zul/*");
for (my $i=0; $i < @alter ; $i++){
print "$alter[$i]\n";
};
einfach das "*.* in nur "*" gewandelt.. dann werden alle verzeichnisse anezeigt.
aber wie mache ich jetz weiter?
LÖSUNG 09.11.2006 um 20:35 Uhr
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:
01.
#!c:/perl/bin/perl
02.
03.
# das sind module für strictes programmieren und warnungen
04.
use strict;
05.
use warnings;
06.
07.
# ein paar konstanten
08.
use constant LOESCHEN => 0;
09.
use constant BEHALTEN => 1;
10.
use constant DELETED => -1;
11.
12.
# dein ordner wo drinne gelöscht werden soll
13.
my $dir = "D:/SCRIPTE/ADMINISTRATOR/test1";
14.
15.
# das log file
16.
my $logFile = "$dir/log.txt";
17.
my @allFiles;
18.
my %allFiles;
19.
my $lastMod;
20.
21.
# zeitpunkt minus 5 tage also alt die dateien und ordner höchstens sein dürfen
22.
my $back5days = (time()-(86400*5));
23.
24.
# hier springt er in die sub cd
25.
&cd($dir);
26.
27.
# alle dateien durchgehen und schauen ob sie älter als 5 tage sind
28.
# ordner werden automatisch auf löschen gesetzt
29.
foreach(@allFiles) {
30.
$lastMod = (stat($_))[9];
31.
$allFiles{$_} = BEHALTEN if(($lastMod - $back5days) > 0 && -f $_);
32.
$allFiles{$_} = LOESCHEN if(($lastMod - $back5days) < 0 && -f $_);
33.
$allFiles{$_} = LOESCHEN if -d $_;
34.
}
35.
36.
# die dateien löschen die älter als 5 tage sind
37.
foreach(keys(%allFiles)) {
38.
if ($allFiles{$_} == LOESCHEN && -f $_) {
39.
$allFiles{$_} = DELETED if unlink($_);
40.
}
41.
}
42.
43.
# die ordner löschen die leer sind
44.
# rmdir löscht nur leere ordner
45.
foreach(keys(%allFiles)) {
46.
if ($allFiles{$_} == LOESCHEN && -d $_) {
47.
$allFiles{$_} = DELETED if rmdir($_);
48.
}
49.
}
50.
51.
# den ganzen spass in ne log datei schreiben
52.
&loggen();
53.
54.
# logdatei schreiben
55.
sub loggen {
56.
open(LOGFILE,">$logFile") or die $!;
57.
foreach(keys(%allFiles)) {
58.
print LOGFILE $_," --> ";
59.
print LOGFILE "File/Directory wurde geloescht...\n\n" if $allFiles{$_} == DELETED;
60.
print LOGFILE "File/Directory ist aktuell...\n\n" if $allFiles{$_} == BEHALTEN;
61.
print LOGFILE "File/Directory wurde nicht geloescht...\n\n" if $allFiles{$_} == LOESCHEN;
62.
}
63.
close(LOGFILE);
64.
}
65.
66.
# diese recursive funktion geht in jeden ordner liest den inhalt aus und
67.
# falls im inhalt ein ordner ist geht er auch in diesen und soweiter (recursiv halt)
68.
# alle pfade von dateien und ordnern werden in ein array geschrieben damit
69.
# man sie später löschen oder behalten kann
70.
sub cd {
71.
my $dir = shift;
72.
my $base = $dir."/";
73.
my @currDir;
74.
opendir(DIR,$dir) or die $!;
75.
@currDir=readdir(DIR);
76.
close(DIR);
77.
foreach(@currDir) {
78.
next if $_ eq '.' or $_ eq '..';
79.
&cd($base.$_) if(-d $base.$_);
80.
push(@allFiles,$base.$_);
81.
}
82.
}
mfg godlike P
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte