IT & + si affinités

Encore un blog de sysadmin … mais pas uniquement ;-)

Supression de doublons en fonction du contenu

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&amp;#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`;
}
Catégorie : IT
Mot-Clé : ,