Sabbel: doppelte K-Mails aussortieren

Beitrag lesen

Hi,

ist das schon jemanden passiert:
Rechner stürzt bei laufendem K-Mail (oder auch anderen?) ab, danach hat man viele Mails doppelt und dreifach.
Bei wenigen Mails kein Problem, bei ein paar Tausenden (über Jahre gesammelt, man will sie nicht wegwerfen) wirklich doof.
Anbei meine Lösung. Ist nicht schnell, aber funktioniert.

Gruß
Sabbel

################################
#!/usr/bin/perl

use Digest::MD5;

$input = $ARGV[0];
$output = $input.'.tmp';
print $input."\n".$output."\n";
open (in,"$input") or die "Kann Datei $input nicht finden!\n";
while ($line =<in>)
        {
                if ($line =~ /^From .*@.*/)
                        {
                                $anzahl++;
                                print $anzahl."\n";
                        }
        }
close in;

open (in,"$input");
open (out,">$output");

$oldline='';

while ($line = <in>)
        {
                if ($line =~ /^From .*@.*/)
                        {
                                $laenge = length($message);
                                $count++;
                                $md5 = md5($message);
                                $oldline=$line;
                                if ($hash{$md5} != 1)
                                        {
                                                print out $message;
                                                $hash{$md5} = 1;
                                                $message = '';
                                                $gesamt = $gesamt + $laenge;
                                                print $count."/".$anzahl.") ".$md5." $laenge - $gesamt\n";
                                        }
                                else
                                        {
                                                $message = '';
                                                print $count."/".$anzahl.") ".$md5." $laenge -  doppelt\n";
                                        }
                        }
                $message = $message.$line;
        }
print out $message;
close in;
close out;

open (in,"$output");
open (out,">$input");
while ($line = <in>)
        {
                print out $line;
        }
close in;
close out;

unlink ($output);

sub md5
        {
                my $inhalt = shift;
                $inhalt =~ s/^From.*?\n\n//s;
                $inhalt =~ s/<.*?>//gs;
                my $md5 = Digest::MD5->new();
                $md5->add($inhalt);
                my $quersumme = $md5->digest();
                $quersumme=unpack("H*", $quersumme);
                return $quersumme;
        }