Buscar archivos duplicados en OSX por hash

14

Estoy buscando una forma de buscar un archivo determinado en OSX (Maverick pero, en general, OSX). En particular, me gustaría hacer lo siguiente:
dado un File_001, me gustaría buscar si en el sistema de archivos existe una copia de este archivo.
No solo con el mismo nombre, me gustaría que el método de comparación sea un algoritmo hash como MD5, SHA, etc.

La mayor parte del "buscador de archivos duplicados" que he intentado solo busca todos los duplicados en una unidad / sistema. En cambio, estaría interesado en enviar un archivo y buscar sus duplicados.

¿Alguien sabe si existe tal programa? ¿Quizás alguna función oscura de Spotlight?

nick2k3
fuente
1
Tenga cuidado con un hash que determina si un archivo dado es una copia. Este enfoque puede fallar con archivos .emlx (formato de archivo de Apple Mail), por ejemplo. Como ayuda para Spotlight, OSX agrega metadatos a los archivos de correo. El mismo correo electrónico en dos rutas diferentes puede tener metadatos diferentes aunque el Id. Del mensaje sea el mismo. Hash diferente para dos archivos que contienen exactamente el mismo correo electrónico sin procesar.
John D.

Respuestas:

17

También puedes usar fdupes. No tiene una opción para buscar duplicados de un archivo específico, pero solo puede seleccionar la salida para el nombre de archivo:

fdupes -r1 .|grep filename

-rrecurre en directorios e -1imprime cada grupo de archivos duplicados en una sola línea.

Otros ejemplos útiles:

fdupes -r . encuentra todos los archivos duplicados en el directorio actual;

fdupes -r . -dN elimina todos excepto el primer duplicado de cada grupo de duplicados;

fdupes -r dir1 dir2|grep dir1/|xargs rmelimina duplicados en dir1.

Se puede instalar fdupescon brew install fdupes.

Lri
fuente
¿Es posible tener una lista de archivos que NO son duplicados en el directorio actual?
Gagarina
7

Puede construirlo fácilmente usted mismo con algunos comandos de shell:

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

    construirá una lista de hash md5 sobre todos sus archivos.

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

    buscará el hash md5 de ARCHIVO PARA BÚSQUEDA

Sin embargo, ejecutar el primer comando (especialmente si lo ejecuta en todo el disco) llevará mucho tiempo.


Si solo desea buscar un archivo, también puede usar

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
fuente
El primer paso debe ser una operación de búsqueda por tamaño exacto.
user188421
@biziclop Si solo desea buscar un archivo, sí. Si desea buscar varios, es más rápido construir el índice una vez y simplemente buscar a través del archivo de índice después.
nohillside
1
Es cierto, por supuesto, acabo de notar esta frase en la pregunta: "En cambio, estaría interesado en enviar un archivo y buscar sus duplicados".
user188421
fdupes debería ser más rápido si primero hace una comparación de fechas, luego hash parcial, luego hash completo.
Gagarina
1

Esto debería funcionar si sustituye el tamaño y el hash para FILE_001 en el comando.

198452 bytes es el tamaño de archivo que utilicé y el archivo md5 hash es 3915dc84b4f464d0d550113287c8273b

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

La salida será una lista de archivos con nombres de ruta relativos al directorio enviado al comando find.

Este enfoque tiene la ventaja de que solo generará archivos hash que coincidan con el tamaño de su original y solo generará nombres de archivos que coincidan con el hash.

John D.
fuente
0

Si no quiere meterse con los scripts, puede acercarse al comportamiento que desea con Araxis Find Duplicate Files $ 10 en la Mac App Store . También hay una demostración de 7 días en su sitio web. Buscar archivos duplicados busca duplicados calculando el hash para cada archivo.

Puede aproximar el comportamiento que desea, configuraría una carpeta con el único archivo que le preocupa y luego agregará las carpetas en las que desea buscar. Esto también informará otros engaños, si los hay, en las rutas de búsqueda.

Esta aplicación tiene muchas características de clasificación agradables que hacen que los resultados sean muy fáciles de entender.

Ɱark Ƭ
fuente