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 > /tmp/AllFiles.md5Attention : 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
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à...