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?
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
-r
se repite en directorios e -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
borra todo excepto el primer duplicado 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
.
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
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.
juan d