Découpage de mbox, la vie des petits scripts

Nouveau serveur de mail, dilemne sur le choix du format de stockage, par fichier ou par boite, maildir ou mbox. Bon ok j’aurais du choisir maildir. Car maintenant je dois découper des très gros mbox qui ralentissent un peu les clients de mail.

j’ai retrouvé ce bout de perl mboxsplit.pl

my $part="off";
my $h=0;
while (<>) {
 my $l=$_;
 chomp;
 $part="arc" if (/^From MAILER.DAEMON/);
 $part="sent" if (/^From [a-z]*\@ledomaine.fr/);
  if ($part ne "off") {
  $c++;
  my $d=$_;
# From MAILER-DAEMON  Mon Feb 12 01:16:39 2018
  $d=~s/^From [^ ]* *[A-Za-z][A-Za-z][A-Za-z] //;
  $d=~s/\d\d \d\d:\d\d:\d\d //;
  $d=~s/ /_/g;
  if ($c > $m ) {
   close($h) unless ($h==0);
   $c=0;
   open($h,">".$part."_".$d);
  }
  $part="off";
 }
 print $h $l;
}
close($h);

on va manuellement trouver de gros mbox (inbox ou Sent généralement) et on tape

cat inbox|perl mboxsplit.pl

ce qui découpe le mbox en morceaux pas trop gros et pas trop petits, et les nommant pas trop mal arc_MMM_YYYY .

 

C’est intéressant la vie de tous ces bouts de codes qu’on n’utilisera qu’une ou deux fois, mais dont on est assez fiers de leur flexibilité.

Je pense à

une rotation de fichier

if [ -f $N ];then cp $N $N.0;fi
for i in 8 7 6 5 4 3 2 1 0;do
 if [ -f "$N.$i" ];then cp $N.$i $N.$(expr 1 + $i);fi
done

 

ou à une détection de connexion et d’envoi smtp douteuse, avec renvoi d’un ratio, pour zabbix

T=5000
L=$(tail -$T /var/log/maillog|wc -l)
P=0
if [ $L -gt 100 ];then
M=$(tail -$T /var/log/maillog|grep -c "ALLOWED .* origin_rdns: (unknown) auth: [a-z]")
P=$(expr $M \* 1000 / $L)
fi
echo $P

 

à tous ces codes qu’on se rappelle vaguement avoir fait, et qu’on n’arrive jamais à retrouver quand on en a besoin. En réalité, ils nous servent à savoir qu’on peut les refaire, très vite et mieux.

Pocket