18 votos

Buscar duplicados de archivos en OSX por hash

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

La mayoría de los "buscadores de archivos duplicados" que he probado sólo buscan todos los duplicados en una unidad/sistema. En cambio, me interesaría presentar un archivo y buscar sus duplicados.

¿Alguien sabe si existe un programa de este tipo? ¿Tal vez alguna función oscura de Spotlight?

22voto

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

fdupes -r1 .|grep filename

-r recurre a los directorios y -1 imprime 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 los duplicados excepto el primero de cada grupo de duplicados;

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

Puede instalar fdupes con brew install fdupes .

7voto

Puedes construirlo tú mismo fácilmente con algunos comandos del shell:

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

    construirá una lista de hashes md5 sobre todos tus archivos.

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

    buscará el hash md5 de FILE-TO-SEARCH

Sin embargo, la ejecución del primer comando (especialmente si lo ejecutas en todo el disco) llevará mucho tiempo.


Si sólo quiere 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

1voto

John D. Puntos 143

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

198452 bytes es el tamaño del archivo que he utilizado y el hash md5 del archivo 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 método tiene la ventaja de que sólo hará el hash de los archivos que coincidan con el tamaño del original y sólo dará salida a los nombres de los archivos que coincidan con el hash.

0voto

andreabedini Puntos 569

Aquí está la lista de las utilidades para esto: lista de buscadores de dupes . Algunos de ellos están altamente optimizados y serán mucho más rápidos que cualquier script.

0voto

Artem Tikhomirov Puntos 4501

Si no quieres meterte con scripts, puedes acercarte al comportamiento que quieres con Araxis Find Duplicate Files 10 dólares en el 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 de cada archivo.

Para aproximarse al comportamiento que desea, debe crear una carpeta con el archivo único que le preocupa, y luego añadir las carpetas en las que desea buscar. Esto también informará de otros duplicados, si hay alguno, en las rutas de búsqueda.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X