Thread Logfile schreibt alles ... soll es aber nicht .. (14 answers)
Opened by SimplyFred at 2007-01-26 08:27

topeg
 2007-01-26 10:22
#73615 #73615
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (dl )
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
59
60
61
62
63
64
65
66
#!/usr/bin/perl

# Bitte immer diese Moduke verwenden
use strict;
use warnings;

# Das Arbeitsverzeichnis in einer Variable plazieren,
# ansonsten ist es unnötig kompliziert das zu ändern.
my $workdir='/var/spool/amavis/virusmails/test';
my $logfile='/var/log/script/log.0';
my $sollalter=31;
my $count=0;
# reine Ahnung was das machen soll....
my $t='???';

# mach eine Fehlermeldung,
# wenn du versuchst das Verzeichnis zu öffnen.
opendir(DIR,$workdir) or die "Konnte '$workdir' nicht öffnen! ($!)\n";
my @files=readdir(DIR);
closedir(DIR);

# Im Array @files steht auch "." und ".." drin.
# es ist günstig das zu entfernen.
@files=grep{$_!~/^(?:.|..)$/}@files;

open(LOG, '>', $logfile) or die "Konnte '$logfile' nicht öffnen ($!)\n";

# ich halte es für "unschön" und unübersichtlich,
# wenn man ständig "$_" verwendet.
# Ist aber Ansichtssache.
foreach my $file (sort @files) { 
    # Du must "$workdir/$file" schreiben,
    # da "$workdir" kein abschließenden "/" hat.
    my $alter = (-M "$workdir/$file");
    # Es macht nur sinn alle weiteren Prüfungen zu machen,
    # wenn die Datei wirklich älter als 31 Tage ist.
    if ($alter > $sollalter) {
        # Jetzt die Datei öffnen und nach virus suchen.
        my $hat_virus=0;
        open(DATEI, '<', "$workdir/$file") or
          warn "konnte Datei '$workdir/$file' nicht öffnen ($!)\n";
        while(<DATEI>) {
            if($_=~m/virus/i) {
              $hat_virus=1;
              last();
            }
        }
        close(DATEI);
        if ($hat_virus) {
            $count++;
#            print "$workdir/$file = $alter\n";    
            print LOG "$t: $workdir/$file älter als 31 Tage ($alter). -> gelöscht\n";
            # es ist günstiger Perleigene Befehle zu nutzen.
            # zum einen ist er schneller,
            # zum anderen ist es eifacher eine Fehlermeldung zu machen.
            #
            # Hier könnte man auch if(unlink(...)) machen
            # und das erfolgreiche Löschen ins LOG schreiben
            unlink("$workdir/$file") or
              warn "konnte '$workdir/$file' nicht löschen ($!)\n";
#            print "$workdir/$file wurde geloescht.\n";
        }  
    }
}
print LOG "$t  -->; $count Dateien wurden geloescht.\n";
close (LOG);

View full thread Logfile schreibt alles ... soll es aber nicht ..