Introduction
Ce petit tutoriel s’intéresse à la suppression des fichiers qui peuvent exister en double au sein de votre système de fichiers.
Scénario
Supposons que l'on stocke dans un répertoire rep2 une copie du contenu de notre répertoire de travail rep1.
Au bout de quelques semaines, et après quelques opérations hasardeuses, le contenu du répertoire rep1 a beaucoup évolué et se trouve être très différent de celui du répertoire rep2. Imaginons que l'on souhaite identifier les fichiers du répertoire rep2 qui n'existent pas (plus) dans le répertoire rep1, et ne conserver que ceux-ci.
Méthode
On va utiliser l'utilitaire fdupes fournit par le paquet du même nom.
fdupes est un programme écrit par Adrian Lopez qui analyse récursivement le contenu de répertoires à la recherche de fichiers dupliqués. Il compare dans un premier temps la taille et la signature MD5 des fichiers, puis effectue une comparaison bit à bit pour vérification.
fdupes est écrit en C et est publié sous licence MIT. (src : Wikipédia)
Voici un exemple de code qui permet de supprimer les fichiers du répertoire rep2 qui apparaissent par ailleurs dans rep1 :
fdupes -r /rep1/ /rep2/ | grep '^/rep2/' | while read fic; do rm "$fic"; done
Attention, ce code reste perfectible, car si un même fichier apparaît deux fois (ou plus) dans le répertoire rep2, mais pas dans le répertoire rep1, toutes les occurrences de celui-ci seront tout de même supprimées.
On peut compléter cet article par la commande suivante qui supprimera tous les sous-répertoires vides du répertoire rep2 :
find /rep2/ -depth -type d -empty -exec rmdir --verbose {} \;