tfe Homepage

23/01/2012

Linux script to delete duplicated images

Histoire d'inaugurer correctement le nouveau serveur, un petit billet/astuce pour détecter des images en double dans un répertoire, et les supprimer si nécessaire.

Nous allons tout d'abord générer une liste de fichiers avec le hash md5 associée  chaque fichier. Pour cela on utilise find couplé a  md5sum:

find /home/user/repertoire -iname '*jpg'|while read n; do md5sum "$n" >> md5sum_images; done

Cette ligne crée un fichier structurée de la forme suivante:

somme1_md5(32_caracteres)    ./nom_de_fichier1
somme2_md5(32_caracteres)    ./nom_de_fichier2
etc...

Il va nous faloir tout d'abord trier les sommes de hashage pour détecter les doublons:

sort md5sum_images > sorted_md5sum_images

Puis détecter les doublons parmis ce nouveau fichier:

uniq -dw 32 --all-repeated=separate sorted_md5sum_images
  1. L'option -d indique de n'afficher que les éléments doublons
  2. L'option -w 32 indique de ne détecter les doublons que sur les 32 premiers caracte¨res
  3. L'option --all-repeated=separate demande d'afficher chaque occurence du doublon et de les séparer par une ligne blanche.

On obtient le résultat suivant:


00a49967be7f43d532db56e1dce595ed  ./reptoire1/DSC00180.JPG
00a49967be7f43d532db56e1dce595ed  ./repertoire2/DSC00180.JPG

00a597f061cabc1ef2af2ffa90948cf5  ./rep3/DSCF0167.JPG
00a597f061cabc1ef2af2ffa90948cf5  ./rep4/DSCF0167.JPG
etc...

Et pour conclure, si on désire supprimer l'ensemble des doublons:

uniq -dw 32  sorted_md5sum_images |cut -d' ' -f 3|xargs rm -v