bash - que - sacar el md5 de un archivo
Solo obtenga el valor hash usando md5sum(sin nombre de archivo) (14)
Yo uso md5sum para generar un valor hash para un archivo. Pero solo necesito recibir el valor hash, no el nombre del archivo.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
¿Cómo puedo ''pelar'' el nombre del archivo y solo mantener el valor?
Bueno, otra forma :)
md5=`md5sum ${my_iso_file} | awk ''{ print $1 }''`
Bueno, tuve el mismo problema hoy, pero tratando de obtener el archivo md5 hash cuando ejecuto el comando find
. Obtuve la pregunta más votada y la envolví en una función llamada md5
para ejecutar en el comando de búsqueda. La misión para mí fue calcular hash para todos los archivos en una carpeta y salir como hash:filename
.
md5() { md5sum $1 | awk ''{ printf "%s",$1 }''; }
export -f md5
find -type f -exec bash -c ''md5 "$0"'' {} /; -exec echo -n '':'' /; -print
Entonces, obtuve algunas piezas de aquí y también de find -exec una función de shell?
De otra manera:
md5=$(md5sum ${my_iso_file} | sed ''/ .*//'' )
De una sola mano:
set -- $(md5sum $file)
md5=$1
De otra manera:
md5=$(md5sum $file | while read sum file; do echo $sum; done)
De otra manera:
md5=$(set -- $(md5sum $file); echo $1)
(No intente eso con back-ticks a menos que sea muy valiente y muy bueno con las barras diagonales inversas).
La ventaja de estas soluciones sobre otras soluciones es que solo invocan md5sum
y el shell, en lugar de otros programas como awk
o sed
. Si eso realmente importa es entonces una pregunta separada; probablemente sea difícil notar la diferencia.
En Mac OS X:
md5 -q file
Otra forma es hacer:
md5sum filename |cut -f 1 -d " "
Cut dividirá la línea en cada espacio y solo devolverá el primer campo.
Puede usar cut
para dividir la línea en espacios y devolver solo el primer campo:
md5=$(md5sum "$my_iso_file" | cut -d '' '' -f 1)
Si necesita imprimirlo y no necesita una nueva línea, puede usar:
printf $(md5sum filename)
Una simple asignación de matriz funciona ... Tenga en cuenta que el primer elemento de una matriz de bash
puede abordarse simplemente con el name
sin el índice [0]
, es decir, $md5
contiene solo los 32 caracteres del md5sum.
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
md5sum
pone una barra invertida antes del hash si hay una barra invertida en el nombre del archivo. Los primeros 32 caracteres o cualquier cosa antes del primer espacio pueden no ser un hash correcto. No sucederá cuando se usa la entrada estándar (el nombre del archivo será simplemente -), por lo que la respuesta de pixelbeat funcionará, pero muchos otros requerirán agregar algo como | tail -c 32
| tail -c 32
.
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
md5=$(md5sum < $file | tr -d '' -'')
md5=$(md5sum < index.html | head -c -4)
md5=`md5sum ${my_iso_file} | cut -b-32`