{{tag>doublons, doublon, fichiers dupliqués}}
====== Chercher des fichiers en double ======
Rechercher des doublons, des fichiers ou répertoires en plusieurs exemplaires.
===== Quelques applications =====
* **[[dupegurume|dupeGuru]]**
* **[[:Fslint]]**, remplacé désormais par **[[:Czkawka]]**
* **[[:Shredder duplicate finder]]** (rmlint-gui) accessible depuis la logithèque d'Ubuntu ou avec //**sudo apt install rmlint-gui**// (Site officiel : [[https://rmlint.readthedocs.io|Shredder duplicate finder]])
* [[https://snapcraft.io/speedy-duplicate-finder|Speedy Duplicate Finder]] : Logiciel propriétaire, version de démonstration, accessible depuis la logithèque d'Ubuntu ou avec //**sudo snap install speedy-duplicate-finder**//
===== En ligne de commande =====
==== En une ligne ====
La commande ci-dessous va récupérer les fichiers dans le répertoire courant, et pour chaque fichier, calculer leur somme de hachage. Ensuite les sommes sont triés et seulement les doublons seront affichés (option ''-d'' et ''-D'' de uniq)
find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD
simple mais non optimisé si vous avez de beaucoup de gros fichier (le hachage peut-être évité si les fichiers n'ont pas la même taille). Si vous êtes dans la situation où vous avez énormément de gros fichier, préférez [[#Avec fdupes|fdupes]]
//réponse provenant du site [[https://unix.stackexchange.com/questions/277697/whats-the-quickest-way-to-find-duplicated-files|What's the quickest way to find duplicated files ?]]//
==== Avec fdupes ====
Ce logiciel permet de donner les doublons en se basant sur le poids et la somme de hachage des fichiers.
[[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>fdupes]]**
Pour l'utiliser récursivement dans un dossier
fdupes -R .
===== Afficher les doublons uniquement en comparant les noms des fichiers =====
Utiliser la commande suivante qui affichera la taille et le chemin des fichiers ayant les mêmes noms.
find . -mindepth 1 -type f -printf '%s %p %f\n' | sort -t ' ' -k 3,3 | uniq -f 2 --all-repeated=separate | cut -d ' ' -f1,2
* ''-type f'' pour indiquer à la commande find de ne prendre que les fichiers (pas les répertoires)
* ''%%-printf '%s %p %f\n'%%'' on affiche pour chaque entrée 3 champs (le poids, le chemin et le nom de fichier) séparé par un espace
* ''%%-t ' '%%'' on indique à la commande sort qu'il y a des champs (donc de ne pas trier par ligne mais par un champ spécifique)
* ''-k 3,3'' on prend le 3ème champ
* ''-f 2'' pour la commande uniq on se base sur le 2ème champ.
* ''cut -d ' ' -f1,2'' on ne garde que les deux premiers champs (le poids et le chemin)