A maneira mais prática de comparar checksums md5

3

Parece-me que arquivos de soma de verificação .md5 fornecido para verificar se os downloads contêm a soma de verificação do arquivo para verificar, mas não o nome do arquivo.

Usar md5sum é aparentemente um pouco impraticável, porque quando -c verifica se deseja que a chave md5 e o nome do arquivo sejam separados por espaço em branco como entrada.

Então, dados esses arquivos que apenas contêm a soma de verificação, qual é o one-liner mais prático para checá-los ?

  1. Este post sugere uma maneira, mas garante manual entrada de chave e nome de arquivo.

    md5sum -c - <<< "b4460802b5853b7bb257fbf071ee4ae2 foo"
    
  2. Este post tem essa sugestão interessante, mas eu acho um pouco difícil de ler e digitar:

    cmp foo.md5 <(md5sum foo | awk '{print $1}') && echo $?
    
  3. Isso funciona, mas é impraticável por causa da entrada manual do nome do arquivo (que não é preenchida automaticamente no meu sistema):

    printf $(cat foo.md5)\tfoo | md5sum -c -
    

    e isso é autocompleto, mas parece difícil:

    printf "%s %s" $(cat foo.md5) foo | md5sum -c -
    
  4. Isso é melhor porque o preenchimento automático funciona, mas é potencialmente um pouco longo e também três etapas.

    md5sum foo | awk '{printf $1}' | diff foo.md5
    

Alguma outra ideia?

    
por lash 10.11.2016 / 11:21

2 respostas

1

O problema é que o site ao qual você está vinculado não tem arquivos md5 padrão.
Arquivos Md5 não possuem o nome do arquivo para cada assinatura. A assinatura e o nome do arquivo precisam ser reconstruídos.

Que tal:

md5sum -c <<<"$b"

Ou:

md5sum -c <(echo $(<$a.md5) $a)

em que $a e $b são:

a="jackson-annotations-2.8.4.jar"
b="$(<jackson-annotations-2.8.4.jar.md5) jackson-annotations-2.8.4.jar"

Ou mais simples:

a=jackson-annotations-2.8.4.jar; b="$(<$a.md5) $a"

Tudo em uma linha com os nomes dos arquivos (duas soluções):

a=jackson-annotations-2.8.4.jar; b="$(<$a.md5) $a"; md5sum -c <<<"$b"
a=jackson-annotations-2.8.4.jar; md5sum -c <(echo $(<$a.md5) $a)

O script inteiro que usei foi:

#!/bin/bash
a=jackson-annotations-2.8.4.jar
site=https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.8.4

wget -N "$site/$a"
wget -N "$site/$a.md5"

b="$(<$a.md5) $a"

md5sum -c - <<<"$b"
    
por 10.11.2016 / 18:08
0

Este é o melhor que você pode obter, pois está usando linhas de soma de verificação md5 não padrão nos arquivos. O liner abaixo não precisa copiar nenhum valor dos arquivos, apenas o nome do arquivo e o arquivo contendo a soma md5

md5sum -c <<< $(echo $(cat jackson-annotations-2.8.4-javadoc.jar.md5) jackson-annotations-2.8.4-javadoc.jar)

    
por 10.11.2016 / 11:42