Rechercher les doublons de fichiers dans OSX par hachage

14

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 File_001, je voudrais rechercher si dans le système de fichiers existe une copie de ce fichier.
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 du "localisateur de fichiers en double" que j'ai essayé simplement de rechercher tous les doublons dans un lecteur / système. Je serais plutôt intéressé à soumettre un fichier et à rechercher ses doublons.

Est-ce que quelqu'un sait si un tel programme existe? Peut-être une fonction obscure de Spotlight?

nick2k3
la source
1
Méfiez-vous d'un hachage pour déterminer si un fichier donné est une copie. Cette approche peut échouer avec les fichiers .emlx (format de fichier Apple Mail), par exemple. Pour aider Spotlight, OSX ajoute des métadonnées aux fichiers courrier. Le même e-mail dans deux chemins différents peut avoir des métadonnées différentes même si l'identifiant du message est le même. Hachage différent pour deux fichiers contenant exactement le même e-mail brut.
John D.

Réponses:

17

Vous pouvez également utiliser fdupes. Il n'a pas d'option pour rechercher les doublons d'un fichier spécifique, mais vous pouvez simplement grep la sortie pour le nom de fichier:

fdupes -r1 .|grep filename

-rrevient dans les répertoires et -1imprime 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 courant;

fdupes -r . -dN supprime tout sauf le premier doublon de chaque groupe de doublons;

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

Vous pouvez installer fdupesavec brew install fdupes.

Lri
la source
Est-il possible d'avoir une liste de fichiers qui NE SONT PAS en double dans le répertoire courant?
gagarine
7

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 hachages md5 sur tous vos fichiers.

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

    recherchera le hachage md5 de FILE-TO-SEARCH

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


Si vous ne souhaitez rechercher qu'un seul fichier, vous pouvez également utiliser

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
nohillside
la source
La toute première passe doit être une opération de recherche par taille exacte.
user188421
@biziclop Si vous ne souhaitez rechercher qu'un seul fichier, oui. Si vous souhaitez en rechercher plusieurs, il est plus rapide de créer l'index une seule fois et de parcourir le fichier d'index par la suite.
nohillside
1
C'est vrai bien sûr, je viens de remarquer cette phrase dans la question: "Je serais plutôt intéressé à soumettre un fichier et à rechercher ses doublons."
user188421
fdupes devrait être plus rapide s'il fait d'abord une comparaison de dates, puis un hachage partiel, puis un hachage complet.
gagarine
1

Cela devrait fonctionner si vous remplacez la taille et le hachage de FILE_001 dans la commande.

198452 octets est la taille de fichier que j'ai utilisée et le hachage md5 est 3915dc84b4f464d0d550113287c8273b

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

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

Cette approche a l'avantage de ne hacher que les fichiers qui correspondent à la taille de votre original et de ne sortir que les noms de fichiers qui correspondent au hachage.

John D.
la source
0

Si vous ne voulez pas jouer avec les scripts, vous pouvez vous rapprocher du comportement que vous souhaitez avec Araxis Find Duplicate Files 10 $ dans le Mac App Store . Il y a aussi une démo de 7 jours sur leur site web. Rechercher les fichiers en double recherche les dupes en calculant le hachage de chaque fichier.

Vous pouvez approximer le comportement que vous souhaitez créer un dossier avec le fichier unique qui vous intéresse, puis ajouter les dossiers dans lesquels vous souhaitez effectuer la recherche. Cela signalera également d'autres dupes, le cas échéant, dans les chemins de recherche.

Cette application possède de nombreuses fonctionnalités de tri intéressantes qui rendent les résultats très faciles à comprendre.

Ɱark Ƭ
la source