Ich rauf mir hier gerade ein wenig die Haare - vielleicht kann mir ja jemand helfen (meine letzten Zotteln zu behalten).
Ich habe hier einen Perl-Script mit dem ich Verzeichnisse nach bestimmten Dateiendungen durchsuchen möchte und die dazu gehörigen Daten dann auf ihr Alter prüfen will um sie dann ggf zu löschen.
Z.B über den Aufruf: cleanup.pl txt /home/
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
use strict;
my $age = 50000;
my $ending = ($ARGV[0]);
my $path = ($ARGV[1]);
my $workdirectory = "/home/edv";
my $savedirectory = "/var/log";
my $counter = 0;
print "\nSuche alle Dateien mit Endung: $ending im Pfad: $path\n\n";
system("find $path -type f -name \*.$ending > $workdirectory/cleanup.list");
open (DATEI, "$workdirectory/cleanup.list") || die "Datei nicht gefunden";
foreach my $line ( <DATEI> )
{
$counter++;
my @stat = stat($line);
print "Letzte Zugriffszeit:$stat[8]\n";
if ((time - $stat[8]) > $age)
{
print "Gelöscht:$line";
unlink($line);
}
}
close (DATEI);
print "\nDateien:$counter\n\n";
Das ganze ist gerade im oberen Teil nicht hübsch - naja - funktioniert aber. Es handelt sich um ein paar tausend Dateien die auf den Servern liegen nebenbei.
Im unteren Teil liegt dann der Hase im Pfeffer.
Ich kann zwar ganz locker Zuweisungen wie
my @stat = stat("/home/edv/test.txt);
per Hand machen - dort kann er ein Stat auslesen.
Sobald aber genau der gleiche Ausdruck im String $line enthalten ist (print zeigt genau diese Ausgabe) bekomme ich nur eine 0 bzw nichts als Output. Also eben das hier:
my @stat = stat($line);
print($line); zeigt aber dennoch
/home/edv/test.txt
Gleiches gilt für den unlink ganz unten. Auch hier: wenn ich einen "festen" Stringausdruck einfüge klappts - sobald das ganze im String ist nicht mehr.
Abschließende Frage bevor ich hier hinwerfe: wie bekomme ich es hin dass der String richtig zugewiesen wird?
Signaturen werden völlig überbewertet