¿Cómo buscar un archivo por un valor hash con un script bash (terminal)?

6

Estoy escribiendo un script para Mac OS X Lion 10.7 y me gustaría saber cómo puedo buscar archivos en función de sus hashes SHA1. Me gustaría buscar en todo el sistema de archivos los archivos que buscaré.

Por ejemplo, el valor SHA1 0d882ff2d5edd7d045c1b57320d2e046793868f8 corresponde al archivo MacOSXUpdCombo10.7.2.dmg . ¿Cómo puedo buscar en el disco duro el archivo con su valor SHA1 sin necesidad de comparar el archivo?

    
pregunta Bryan Larson 28.03.2012 - 21:54

3 respuestas

8

Puedes usar el comando find :

find / -type f -exec md5 {} \; | grep 0d882ff2d5edd7d045c1b57320d2e046793868f8

Sin embargo, ya que está ejecutando esto en todos los archivos, puede ser extremadamente lento. Intente limitar el directorio de búsqueda reemplazando / con la ruta a un directorio específico que desea buscar.

    
respondido por el jtbandes 28.03.2012 - 22:08
1

Aquí hay algunas líneas de comando que pueden ayudar a encontrar un archivo de su resumen SHA1. Digamos que el archivo que estamos buscando es MacOSXUpdCombo10.7.2.dmg .

# store the size of the searched file
size='/bin/ls -l MacOSXUpdCombo10.7.2.dmg | awk '{print $5}''
# store the digest of the serached file
sha1='/usr/bin/openssl sha1 MacOSXUpdCombo10.7.2.dmg | awk '{print $2}''
/usr/bin/sudo find / -type f -size ${size} -exec /usr/bin/openssl sha1 {} \; |
    grep ${sha1}

Este find se ejecutará en archivos simples y no en directorios, socket o archivos especiales. También solo se ejecutará en el archivo del tamaño correcto , por lo tanto evite hacer un resumen del Kernel o de su biblioteca de iTunes y en una bandada de pequeños archivos temporales.

Si está seguro de que el nombre del archivo incluye la extensión correcta, Este hallazgo podría ser más detallado con el siguiente lista de argumentos:

/usr/bin/sudo find / -type f -name "*.dmg" -size ${size} -exec /usr/bin/openssl sha1 {} \; |
    grep ${sha1}
    
respondido por el daniel Azuelos 09.05.2014 - 23:56
0

También puedes intentar usar xargs dependiendo de la cantidad de archivos que estés buscando.

find / -type f |
    xargs -I {} openssl sha1 {} | 
    grep 0d882ff2d5edd7d045c1b57320d2e046793868f8
    
respondido por el E1Suave 18.04.2012 - 19:06

Lea otras preguntas en las etiquetas