Me gustaría crear una lista de suma de verificación md5 para todos los archivos en un directorio.
Quiero cat filename | md5sum > ouptput.txt
. Quiero hacer esto en 1 paso para todos los archivos en mi directorio.
Cualquier ayuda sería genial.
command-line
Walter Wayne Leutwyler
fuente
fuente
Respuestas:
Puede pasar
md5sum
múltiples nombres de archivo o expansiones bash:Si quieres ponerte elegante, puedes usar cosas como
find
profundizar y filtrar los archivos, así como trabajar de forma recursiva:fuente
md5sum
los archivos dentro de los subdirectorios,md5sum *
emitiendo lo anterior al nivel de subdirectorio diciendo ... es un directoriofind -type f -exec md5sum '{}' +
y `find -type f -exec md5sum '{}' 'Pude obtenerlo. Gracias :)openssl md5 * > checklist.txt
**
de forma recursiva (como zsh), es aún más simple:md5sum **/* 2>/dev/null
Un gran programa de creación / verificación de suma de comprobación es rhash. Crea incluso archivos compatibles con SFV, y también los verifica.
Es compatible con md4, md5, sha1, sha512, crc32 y muchos otros.
Además, puede hacer creación recursiva (opción -r) como md5deep o sha1deep.
Por último, pero no menos importante, puede formatear la salida del archivo de suma de verificación; por ejemplo:
genera un archivo CSV que incluye la ruta completa de los archivos comenzando recursivamente con el
/home
directorio.Encuentro extremadamente útil incluso la opción -e renombrar archivos insertando crc32 sum en el nombre.
Puede cambiar "md5sum" con "rhash" en los ejemplos de PhoenixNL72.
fuente
Aquí hay dos ejemplos más extensos:
Cree un archivo md5 en cada directorio que aún no tenga uno, con rutas absolutas:
Cree un archivo md5 en cada carpeta que aún no tenga uno: sin rutas, solo nombres de archivo:
Lo que difiere entre 1 y 2 es la forma en que se presentan los archivos en el archivo md5 resultante.
Los comandos hacen lo siguiente:
La salida de este script completo puede redirigirse a un archivo (.....; done> test.log) o canalizarse a otro programa (como grep). La salida solo le dirá qué directorios se omitieron y cuáles se han procesado.
Después de una ejecución exitosa, terminará con un archivo @ md5Sum.md5 en cada subdirectorio de su directorio actual
Llamé al archivo @ md5Sum.md5 para que aparezca en la parte superior del directorio en un recurso compartido de samba.
Los siguientes comandos pueden verificar todos los archivos @ md5Sum.md5:
Luego puede grep checklog.txt usando grep -v OK para obtener una lista de todos los archivos que difieren.
Para regenerar un @ md5Sum.md5 en un directorio específico, cuando cambie o agregue archivos, por ejemplo, elimine el archivo @ md5Sum.md5 o cámbiele el nombre y vuelva a ejecutar el comando de generación.
fuente
Llegué a este problema, y aunque las soluciones anteriores son elegantes, quería un truco rápido y sucio para esta situación: 1 directorio, con subdirectorios de un nivel en su interior.
Entonces, ingrese el directorio en un shell y ejecute:
Esto obtiene todos los archivos en el directorio de nivel superior, elimina la advertencia de error acerca de que los subdirectorios son directorios y luego ejecuta md5sums en el contenido del subdirectorio. Ventaja: fácil de recordar, hace exactamente lo que se supone que debe hacer. Siempre me confundo al encontrar la sintaxis y nunca puedo recordarla, así que no es necesario hacer un bucle, etc., al tratar con espacios en los nombres de directorio, este revestimiento funcionó bien. No es una solución potente y robusta, no sirve para> 1 nivel de subdirectorios, pero es una solución rápida y fácil para el problema.
fuente