#!/usr/local/bin/perl # # deldupmail: メールフォルダ内の重複メールを削除する. # # [1997/09/25] OSHIRO Naoki. # [1997/12/23] OSHIRO Naoki. # ・From 行直前の空行も考慮するようにした. # # $Log:$ # $stack=""; $pout=0; $num=0; $dup_num=0; $header=1; while (<>) { if ($header==1) { if (/^From .+/) { $pout=0; #print STDERR "$num\r"; $num++; $header=2; } else { $header=0; } } $header=1 if ($header==0 && /^$/); $header=0 if ($header==2 && /^$/); if ($header==2 && /^Message-I[dD]: /) { # Message-Id のパターンマッチに i を指定すると遅くなる $mes_id=$'; $header=0; if ($mes_id{$mes_id}++==0) { print "$stack"; $pout=1; } else { print STDERR "$num: duplicate[$ARGV:$dup_num::$mes_id{$mes_id}]: $mes_id"; $dup_num++; $pout=0; } $stack=""; # この行がないと処理がめちゃめちゃ重くなる } if ($pout==0) { $stack.=$_ if ($header!=0); } else { print; } } print $stack if $pout==1;