Buscar duplicados de archivos en OSX mediante hash

11

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 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 de hash como MD5, SHA, etc.

La mayoría del "buscador de archivos duplicados" que he intentado simplemente 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? Tal vez alguna función oscura de Spotlight?

    
pregunta nick2k3 24.01.2014 - 20:31

5 respuestas

10

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

fdupes -r1 .|grep filename

-r se repite en 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 excepto el primer duplicado de cada grupo de duplicados;

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

Puedes instalar fdupes con brew install fdupes .

    
respondido por el user495470 26.01.2014 - 17:12
6

Puedes compilar esto fácilmente con algunos comandos de shell:

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

    creará una lista de hashes md5 en todos tus 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 ejecutas 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
    
respondido por el nohillside 26.01.2014 - 11:29
1

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

198452 bytes es el tamaño de archivo que usé y el hash md5 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 relacionados con el directorio enviado al comando de búsqueda.

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

    
respondido por el John D. 03.12.2014 - 00:03
0

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 otro script.

    
respondido por el averasko 10.12.2014 - 04:27
0

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

Puede aproximar el comportamiento que desea, puede configurar una carpeta con el único archivo que le preocupa, y luego agregar las carpetas en las que desea buscar. Esto también informará otros duplicados, si hay alguno, en la búsqueda caminos.

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

    
respondido por el Ɱark Ƭ 24.03.2015 - 13:01

Lea otras preguntas en las etiquetas