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 'quitar' el nombre del archivo y solo seguir siendo el valor?
Respuestas:
Bueno, otra forma :)
fuente
md5=`md5sum < ${my_iso_file}`
embargo, esto aún genera "-" al final. Pero para las comparaciones esto debería ser suficiente.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
y su código vuelveMD5
.-
mediante la adición| awk '{print $1}'
final de su código =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerUna asignación de matriz simple funciona ... Tenga en cuenta que el primer elemento de una
bash
matriz se puede abordar simplementename
sin el[0]
índice, es decir,$md5
contiene solo los 32 caracteres de md5sum.fuente
bash
, pero ¿puede decirme si la matriz es una característica solo de bash o algún estándar de shell?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Debería salir68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
es que no funciona? Erroresbash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
genera 2 palabras de shell para stdout :acbd18db4cc2f85cedef654fccc4a4d8
y-
(-
indica la fuente como stdin ). - Debe informar fiesta para capturar esas palabras en una cadena, usando comando de sustitución :$( command )
. - Los(
corchetes)
producen una matriz bash con 2 elementos. Sin embargo, debe asignar esa construcción de matriz( … )
a un nombre de variable; por lo tanto, utilizando MD5 como el nombre de la matriz:md5=($(echo -n foo | md5sum))
. No ha asignado la matriz a un nombre de variablePuede usar
cut
para dividir la línea en espacios y devolver solo el primer campo:fuente
cut -c 1-32
md5sum
->sha256sum
sin recordar qué cantidad de caracteres necesitas "cortar".En Mac OS X:
fuente
gmd5sum
desdecoreutils
funcionaría en MacOS comomd5sum
en otras respuestas que se mencionan aquí.fuente
$()
(aunque no hacen daño) pero ciertamente las necesita${}
.De una sola mano:
De otra manera:
De otra manera:
(No intente eso con tick backs a menos que sea muy valiente y muy bueno con las barras invertidas).
La ventaja de estas soluciones sobre otras soluciones es que solo invocan
md5sum
y el shell, en lugar de otros programas comoawk
osed
. Si eso realmente importa es entonces una pregunta separada; probablemente te costará notar la diferencia.fuente
Otra forma es hacer:
El corte dividirá la línea en cada espacio y devolverá solo el primer campo.
fuente
fuente
Si necesita imprimirlo y no necesita una nueva línea, puede usar:
fuente
fuente
md5sum
coloca una barra diagonal inversa antes del hash si hay una barra diagonal inversa en el nombre del archivo. Los primeros 32 caracteres o cualquier cosa antes del primer espacio pueden no ser un hash adecuado. No sucederá cuando se use la entrada estándar (el nombre del archivo será solo -), por lo que la respuesta de pixelbeat funcionará, pero muchos otros requerirán agregar algo como| tail -c 32
.fuente
Bueno, tuve el mismo problema hoy, pero tratando de obtener el hash del archivo md5 al ejecutar el
find
comando. Obtuve la pregunta más votada y la envolví en una función llamadamd5
a ejecutar en el comando find. La misión para mí fue calcular el hash para todos los archivos en una carpeta y generarlo comohash:filename
.Entonces, ¿obtuve algunas piezas de aquí y también de find -exec a shell function?
fuente
En aras de la exhaustividad, una forma con sed usando regex y capture group:
La expresión regular es capturar todo en un grupo hasta que se alcanza un espacio. Para que el grupo de captura funcione, debe capturar todo en sed. (Más información sobre los grupos sed y caputer aquí: https://stackoverflow.com/a/2778096/10926293 )
Como delimitador en sed, uso dos puntos porque no son válidos en las rutas de archivo y no tengo que escapar de la barra. ruta de archivo.
fuente
De otra manera:
fuente
fuente