Come cercare un file con un valore hash con script bash (terminale)?

6

Sto scrivendo uno script per Mac OS X Lion 10.7 e vorrei sapere come posso cercare i file in base ai loro hash SHA1. Vorrei cercare l'intero file system per i file che cercherò.

Ad esempio il valore SHA1 0d882ff2d5edd7d045c1b57320d2e046793868f8 corrisponde al file MacOSXUpdCombo10.7.2.dmg Come posso cercare nel disco rigido il file con il suo valore SHA1 senza dover confrontare il file?

    
posta Bryan Larson 28.03.2012 - 21:54
fonte

3 risposte

8

Puoi utilizzare il comando find :

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

Tuttavia, dal momento che lo stai eseguendo su tutti i file, potrebbe essere estremamente lento: prova a limitare la directory di ricerca sostituendo / con il percorso di una directory specifica che desideri cercare.

    
risposta data 28.03.2012 - 22:08
fonte
1

Ecco alcune linee di comando che possono aiutare a trovare un file dal suo digest SHA1. Diciamo che il file che stiamo cercando è 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}

Questo find verrà eseguito su file normali e non su directory, socket o file speciali. Funzionerà anche su file di dimensioni corrette evitando di fare un riassunto del Kernel o della tua libreria di iTunes e su uno stormo di piccoli file temporanei.

Se sei sicuro che il nome del file includa l'estensione giusta, questa scoperta potrebbe essere ulteriormente accellerata con quanto segue elenco di argomenti:

/usr/bin/sudo find / -type f -name "*.dmg" -size ${size} -exec /usr/bin/openssl sha1 {} \; |
    grep ${sha1}
    
risposta data 09.05.2014 - 23:56
fonte
0

Potresti anche provare a usare xargs a seconda di quanti file stai cercando.

find / -type f |
    xargs -I {} openssl sha1 {} | 
    grep 0d882ff2d5edd7d045c1b57320d2e046793868f8
    
risposta data 18.04.2012 - 19:06
fonte

Leggi altre domande sui tag