Buscar archivos duplicados en OSX por hash

Estoy buscando una forma de buscar un archivo determinado en OSX (Maverick pero más generalmente 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 fuera un algoritmo hash como MD5, SHA, etc.

La mayoría de los "buscadores de archivos duplicados" que he probado simplemente buscan todos los duplicados en una unidad/sistema. En cambio, estaría interesado en enviar un archivo y buscar sus duplicados.

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

Tenga cuidado con un hash que determine si un archivo determinado 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.

Respuestas (4)

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

fdupes -r1 .|grep filename

-rse repite 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 . -dNborra todo excepto el primer duplicado de cada grupo de duplicados;

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

Puede instalar fdupescon brew install fdupes.

¿Es posible tener una lista de archivos que NO son un duplicado en el directorio actual?

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

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

    creará una lista de hashes md5 sobre todos sus archivos.

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

    buscará el hash md5 de FILE-TO-SEARCH

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 utilizar

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
    
La primera pasada debería ser una operación de búsqueda por tamaño exacto.
@biziclop Si solo desea buscar un archivo, sí. Si desea buscar varios, es más rápido crear el índice una vez y luego buscar en el archivo de índice.
Es cierto, por supuesto, acabo de notar esta oración en la pregunta: "En cambio, estaría interesado en enviar un archivo y buscar sus duplicados".
fdupes debería ser más rápido si primero hace una comparación de fechas, luego un hash parcial y luego un hash completo.

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

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

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

El resultado será una lista de archivos con nombres de ruta relativos al directorio enviado al comando de búsqueda.

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.

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. Find Duplicate Files 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ía las carpetas en las que desea buscar. Esto también informará sobre otros duplicados, si los hay, en las rutas de búsqueda.

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