Eu uso o md5sum para gerar um valor de hash para um arquivo. Mas eu só preciso receber o valor do hash, não o nome do arquivo.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
Como posso retirar o nome do arquivo e permanecer apenas o valor?
Respostas:
Bem, de outra maneira :)
fonte
md5=`md5sum < ${my_iso_file}`
No entanto, isso ainda gera "-" no final. Mas para comparações isso deve ser suficiente.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
e seu código retornaMD5
.-
adicionando o| awk '{print $1}'
final do seu código =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerUma simples atribuição de array funciona ... Observe que o primeiro elemento de um
bash
array pode ser endereçado apenas peloname
sem o[0]
índice, ou seja,$md5
contém apenas os 32 caracteres do md5sum.fonte
bash
, mas você pode me dizer se a matriz é um recurso somente do bash ou algum padrão de shell?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Ele deve saída68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
que não funciona? Errobash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
gera 2 palavras shell para stdout :acbd18db4cc2f85cedef654fccc4a4d8
e-
(o-
indica a fonte como stdin ). - Você deve dizer o bash para capturar essas palavras em uma string, usando comando de substituição :$( command )
. - Os(
colchetes)
produzem uma matriz bash com 2 elementos. No entanto, você deve atribuir essa construção de matriz( … )
a um nome de variável; Por conseguinte, utilizando MD5 como o nome da matriz:md5=($(echo -n foo | md5sum))
. Você não atribuiu a matriz para um nome de variávelVocê pode usar
cut
para dividir a linha em espaços e retornar apenas o primeiro tal campo:fonte
cut -c 1-32
md5sum
->sha256sum
sem lembrar a quantidade de caracteres que você precisa "cortar".No Mac OS X:
fonte
gmd5sum
a partircoreutils
iria trabalhar em MacOS comomd5sum
em outras respostas aqui mencionados.fonte
$()
(embora elas não causem danos), mas certamente precisa delas${}
.Mão única:
Outra maneira:
Outra maneira:
(Não tente fazer isso com back-ticks, a menos que você seja muito corajoso e muito bom com barras invertidas.)
A vantagem dessas soluções em relação a outras soluções é que elas apenas invocam
md5sum
e o shell, em vez de outros programas comoawk
oused
. Se isso realmente importa é então uma questão separada; você provavelmente teria dificuldade em perceber a diferença.fonte
Outra maneira é fazer:
Cortar dividirá a linha em cada espaço e retornará apenas o primeiro campo.
fonte
fonte
Se você precisar imprimi-lo e não precisar de uma nova linha, poderá usar:
fonte
fonte
md5sum
coloca barra invertida antes do hash se houver barra invertida no nome do arquivo. Os primeiros 32 caracteres ou qualquer coisa antes do primeiro espaço podem não ser um hash adequado. Isso não acontecerá ao usar a entrada padrão (o nome do arquivo será apenas -), portanto a resposta do pixelbeat funcionará, mas muitos outros exigirão a adição de algo como| tail -c 32
.fonte
Bem, eu tive o mesmo problema hoje, mas tentando obter o arquivo md5 hash ao executar o
find
comando. Eu recebi a pergunta mais votada e a envolvi em uma função chamadamd5
para executar no comando find. A missão para mim foi calcular o hash para todos os arquivos em uma pasta e gerá-lo comohash:filename
.Então, eu peguei algumas peças daqui e também encontrei -exec uma função shell?
fonte
Por uma questão de integridade, uma maneira com o sed usando regex e grupo de captura:
A expressão regular está capturando tudo em um grupo até que um espaço seja alcançado. Para que o grupo de captura funcione, você precisa capturar tudo no sed. (Mais sobre os grupos sed e caputer aqui: https://stackoverflow.com/a/2778096/10926293 )
Como delimitador no sed, eu utilizo dois pontos porque eles não são válidos nos caminhos de arquivos e não preciso escapar dos cortes no caminho de arquivo.
fonte
Outra maneira:
fonte
fonte