Accueil > Divers (et d’été) > Informatique > Scripts et outils maison > Trouver les fichiers en double sur votre disque dur

Trouver les fichiers en double sur votre disque dur

samedi 16 août 2008, par Paul Courbis

A force de télécharger on fini par accumuler des tonnes de fichiers en plusieurs exemplaires. Avec les tailles actuelles des disques, il devient de plus en plus difficile de faire le ménage. Voici une méthode pour trouver la liste des fichiers présents en plusieurs exemplaires sur vos disques durs...

Les explication suivantes supposent un système Unix (Linux, HPUX, etc...) ou Windows avec une surcouche Unix-like (comme Cygwin).

Première étape : constituer la liste des fichiers avec leurs sommes MD5

La somme MD5 (Message Digest 5) est la somme de contrôle d’un fichier. La probabilité que deux fichiers aient la même « signature » est infinitésimale et le fait que deux fichiers aient la même signature peut donc être considéré comme équivalent au fait qu’ils soient identiques. Il suffit d’utiliser la commande find. Par exemple pour lister tous les films avi sur les disques :

find / -iname "*.avi" -print0 | \
         xargs -0 md5sum > /tmp/AllFiles.md5

Attention : cette commande peut mettre un certain temps à s’exécuter ! Les résultats sont stockés dans le fichier /tmp/AllFiles.md5

Seconde étape : déterminer la liste des doublons

Le script suivant détermine cette liste en triant les fichiers par leur somme MD5 et en affichant les noms de fichiers portant des sommes identiques (seule limitation : si les noms de fichier contiennent des tabulations, ils seront tronqués)

#!/bin/sh

export LC_ALL='C'

cat /tmp/AllFiles.md5                          | \
       sort -u                                 | \
       sed 's/ \**/\t/'                         | \
       awk -F '\t' '
BEGIN  { FIRST=yes; MD5=""; OLDF="" }

       {
         if ( $1 == MD5 )
         {
            if ( FIRST == "yes" )
            {
               FIRST="no"
               printf( "\n\nFILES WITH %s:\n\n\t%s\n",
                        $1, OLDF );
            }
            printf( "\t%s\n", $2 );
         }
         else
         {
            MD5=$1
            OLDF=$2
            FIRST="yes"
         }
       }
'

Et voilà...

PS : merci à « mab » pour la correction

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Les spams donneront systématiquement lieu à dépôt de plainte. Les messages comportant trop de fautes d'orthographe seront purement et simplement supprimés.