18 Sep 2016, 00:00

Recherche et suppression de doublons avec fdupes

Share

Suite à un usage parallèle et complètement désorganisé de 2 disques (appelés ici arbo1 et arbo2), ces derniers contiennent en gros les mêmes données, mais la version la plus récente d’un document peut se trouver dans arbo1 ou dans arbo2.

Je souhaite donc, pour simplifier le travail de fusion de ces 2 dossiers (et mise en place d’une sauvegarde correcte ;) )à supprimer tous les fichiers de l’arborescence 2 qui sont déjà existants et identiques dans l’arborescence 1.

La première étrape va consister à s’assurer qu’il n’y ait aucun doublon dans l’arbo1 elle-même, puis dans l’arbo2 elle-même. Nous utiisons pour ça fdupes, inclus dans les dépôts Debian, qui liste les fichiers dupliqués via vérification md5.

D’abord, nous les listons :

fdupes -r ./arbo1

Selon la quantité de doublons nous pouvons choisir la version à conserver à la main, via le paramètre -d, ou bien supprimer le prompt et ne garder que la “première” occurence, en ajoutant l’option -N. Par exemple, pour ne pas s’embeter :

fdupes -rdN ./arbo1

Nous faisons la même opération dans l’arborescence 2

fdupes -rdN ./arbo2

Ainsi, nous sommes sûrs que s’il reste des fichiers dupliqués, il y aura au moins une occurence du fichier dans chacune des arborescences, les doublons locaux étant supprimés. Nous allons donc pouvoir utiliser fdupes sur les 2 arborescences en même temps, et supprimer automatiquement celles situées dans arbo2. J’ai préféré utiliser grep avec le chemin souhaité pour isoler les fichiers à supprimer, plutôt que d’utiliser le paramètre -f qui considérait comme “première occurence” un coup un fichier de arbo1, un coup un ficher de arbo2.

D’abord on liste uniquement les fichiers situés dans arbo2 (mais qui existent à l’identique dans arbo1 ) :

fdupes -r ./ | grep './arbo2'

Les guillemets simple autour de arbo2 permettent de gérer si le dossier comporte un espace.

Enfin, nous pouvons les piper avec la commande rm, via l’intermédiaire de read qui permet de prendre en compte les noms de fichier/dossier contenant des espaces :

fdupes -r ./ | grep './arbo2' | while read f; do rm "$f"; done

Ainsi, tous les fichiers subsistants dans “arbo2” sont des fichiers uniques, n’existant pas dans arbo1, ou bien pas à la même version, et qu’il faudra donc trier manuellement (en tout cas dans le cas ci-présent d’absence totale d’organisation).
Pour simplifier ce tri, on peut également supprimer tous les répertoires vides de arbo2 via cette commande :

find './arbo2/' -type d -empty -print -delete