Pour mon premier article voici un petit script en perl que j’ai fait tout seul comme un grand 🙂
Voici le contexte : nous utilisons un vieux serveur mail pas libre (boooouuhhh !) qui tourne sur un OS pas libre non plus (re boooouuhhh !!) et en plus il gère mal l’IMAP.
Suite à une mauvaise manipulation d’utilisateur sur un compte partagé, les mails se sont multipliés comme dans l’histoire des cinq pains et des deux poissons. A la fin nous nous sommes retrouvés avec des dizaines de milliers de mails dont certains étaient uniques et d’autres dupliqués en plusieurs exemplaires. Evidemment le temps que nous soyons alertés, de nombreux mails étaient arrivés dans cette boite donc filtrer par date n’était pas évident.
Sur ce logiciel, un mail se compose de deux fichiers ayant un même nom, généré par le logiciel et des extensions différentes. Le but était donc de filtrer par contenu en ne gardant qu’un seul couple de fichiers par email.
#!/usr/bin/perl my $dir_in='/home/in'; #répertoire contenant les fichiers avec doublons my $dir_out='/home/out'; #répertoire ou placer les fichiers uniques my %tab=(); chdir($dir_in) || die ("Erreur chdir 1 \n"); foreach (<*.txt>) { $retour = `md5sum $_`; # calcul du md5 des fichiers pour repérer les copies @valeur=split (/\s+/,$retour); # récupération du md5 et du nom du fichier $tab{$valeur[0]}=$valeur[1]; # on créé un tableau associatif dont la clé est le md5 du fichier. # de cette façon on aura qu&#039;une entrée par occurrence de mail } while ( my ($key,$val) = each %tab ) { # sélection et déplacement des fichiers. @result=split (/\./,$val); `mv $dir_in/$result[0].* $dir_out`; }