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.
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.
Respuestas:
Puede pasar md5sum
múltiples nombres de archivo o expansiones bash:
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
Si quieres ponerte elegante, puedes usar cosas como find
profundizar y filtrar los archivos, así como trabajar de forma recursiva:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
los archivos dentro de los subdirectorios, md5sum *
emitiendo lo anterior al nivel de subdirectorio diciendo ... es un directorio
find -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:
rhash --md5 -p '%h,%p\n' -r /home/
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.
Aquí hay dos ejemplos más extensos:
Cree un archivo md5 en cada directorio que aún no tenga uno, con rutas absolutas:
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
Cree un archivo md5 en cada carpeta que aún no tenga uno: sin rutas, solo nombres de archivo:
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
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:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
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.
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:
md5sum * */* 2>/dev/null > md5sum.md5
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.