18 votes

Recherche de doublons de fichiers dans OSX par hachage

Je cherche un moyen de rechercher un fichier déterminé dans OSX (Maverick mais plus généralement OSX). En particulier, je voudrais faire ce qui suit :
Étant donné un Fichier_001, j'aimerais rechercher si une copie de ce fichier existe dans le système de fichiers.
Pas seulement avec le même nom, je voudrais que la méthode de comparaison soit un algorithme de hachage comme MD5, SHA etc.

La plupart des "détecteurs de fichiers en double" que j'ai essayés se contentent de rechercher tous les doublons dans un lecteur/système. Je serais plutôt intéressé par la soumission d'un seul fichier et la recherche de ses doublons.

Quelqu'un sait-il si un tel programme existe ? Peut-être une fonction obscure de Spotlight ?

22voto

Vous pouvez également utiliser fdupes . Il ne dispose pas d'une option permettant de rechercher les doublons d'un fichier spécifique, mais vous pouvez simplement rechercher le nom du fichier dans la sortie :

fdupes -r1 .|grep filename

-r récure dans les répertoires et -1 imprime chaque groupe de fichiers en double sur une seule ligne.

Autres exemples utiles :

fdupes -r . trouve tous les fichiers en double dans le répertoire actuel ;

fdupes -r . -dN supprime tous les doublons, sauf le premier, de chaque groupe de doublons ;

fdupes -r dir1 dir2|grep dir1/|xargs rm supprime les doublons dans dir1 .

Vous pouvez installer fdupes avec brew install fdupes .

7voto

nohillside Points 82672

Vous pouvez facilement le construire vous-même avec quelques commandes shell :

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    va construire une liste de hashs md5 sur tous vos fichiers.

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    recherchera le hachage md5 du FICHIER-RECHERCHE

L'exécution de la première commande (surtout si vous l'exécutez sur l'ensemble du disque) prendra cependant beaucoup de temps.


Si vous ne souhaitez rechercher qu'un seul fichier, vous pouvez également utiliser la méthode suivante

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done

1voto

John D. Points 613

Cela devrait fonctionner si vous substituez la taille et le hachage du FICHIER_001 dans la commande.

198452 bytes est la taille du fichier que j'ai utilisé et le hash md5 du fichier est 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

La sortie sera une liste de fichiers avec des noms de chemin relatifs au répertoire envoyé à la commande find.

Cette approche présente l'avantage de ne hacher que les fichiers qui correspondent à la taille de l'original et de n'afficher que les noms de fichiers qui correspondent au hachage.

0voto

Artem Tikhomirov Points 4501

Si vous ne voulez pas vous embêter avec scripts, vous pouvez vous rapprocher du comportement que vous souhaitez avec Araxis Find Duplicate Files 10 $ dans le Mac App Store . Il existe également une démonstration de 7 jours sur leur site web. Find Duplicate Files recherche les doublons en calculant le hachage de chaque fichier.

Pour obtenir le comportement souhaité, il suffit de créer un dossier contenant le fichier qui vous intéresse, puis d'ajouter les dossiers dans lesquels vous souhaitez effectuer une recherche. Cela permettra également de signaler les doublons, s'il y en a, dans les chemins de recherche.

Cette application dispose de nombreuses fonctions de tri agréables qui rendent les résultats très faciles à comprendre.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X