10 votos

¿Cómo md5 una lista de rutas de archivo contenidas en un archivo?

Tengo una carpeta que contiene muchas carpetas que contienen los archivos. Miles de personas.

Que puedo hacer find . -type f > ./FILE-LISTING.TXT a crear un archivo que contiene muchos miles de rutas de archivo que se parece a esto:

./Anders/Letters/20190101 Rent.pdf
./Anders/Letters/20190103 Appeal.pdf
./Anders/Letters/20190107 Decision.pdf
./Beeker/Letters/20180101 Rent.pdf

¿Cómo puedo alimentar a la lista de rutas de los archivos en md5 para producir una salida con formato como este:

9cf14e4d666dcb6aab17763b02429a19 ./Anders/Letters/20190101 Rent.pdf
d1bb70baa31f1df69628c00632b65eab ./Anders/Letters/20190103 Appeal.pdf
7a0f5bc18688fe8ba32f43aa6ec53fb1 ./Anders/Letters/20190107 Decision.pdf
a0c96a79cf3b1847025d9f073151519d ./Beeker/Letters/20180101 Rent.pdf

PD: quiero el hash md5 de los archivos de referencia, no el md5 de la lista de archivos, ni el hash md5 de las cadenas en el file-listing.txt.

También, sería más rápido que hacerlo todo en una sola línea de comandos, o hacerlo en dos pases (find crear file-listing.txt, a continuación, md5 crear file-listing-md5.txt)?

12voto

 find . -type f -exec /sbin/md5 -r {} +
       ^^^^^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^
          |      |        |       |  |
          |      |        |       |  +- add as many file names as possible per call
          |      |        |       +---- replace with names of found files
          |      |        +------------ command to run
          |      +--------------------- execute following command
          +---------------------------- find any "normal" file
 

debe hacer el truco (y ocuparse de los problemas habituales con espacios, etc. dentro de los nombres de archivo).

En cuanto a más rápido: una pasada es casi siempre más rápida que dos pasadas. En el caso específico, el cálculo de MD5 lleva tanto tiempo que probablemente se pueden ignorar otros factores.

PD: la punta del sombrero a @lhf para recordarme -r

9voto

Igor Zelaya Puntos 2266

Prueba esto:

 find . -type f -print0 | xargs -0 md5 -r
 

Nota -print0 y -0 para manejar espacios en los nombres de archivo.

En comparación con find . -type f -exec , esta solución ejecuta md5 mucha menos frecuencia, aunque esto podría no tener un impacto medible.

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