Verifica se o nome do arquivo é de um nome de arquivo .md5sum do conteúdo do arquivo

2

No Bash, como posso verificar com mais facilidade que o nome do arquivo de um arquivo regular tem o formato mostrado abaixo?

<filename>.<md5sum of file content>

Por exemplo, suponha que eu tivesse um arquivo cujo nome original fosse foo.txt e tivesse esse conteúdo:

Hello world

O md5sum deste arquivo é:

f0ef7081e1539ac00ef5b761b4fb01b3

Portanto, eu já mudei o nome do arquivo para:

foo.txt.f0ef7081e1539ac00ef5b761b4fb01b3

Como, no Bash, posso fazer o melhor processamento de string para verificar se a parte do nome do arquivo após o último ponto é de fato o md5sum do conteúdo do arquivo?

    
por Dave 26.02.2018 / 14:58

2 respostas

1

Considerando um script bash onde você fornece o nome do arquivo que deseja testar como parâmetro:

./script.sh filename.f0ef7081e1539ac00ef5b761b4fb01b3

conteúdo de script.sh :

#!/bin/bash

#Get the md5 value from the filename (get the substring after the last '.' character)
expectedMD5=${1##*.}

#Calculate the md5sum value of the file
realMD5=$( md5sum $1 | awk '{ print $1 }' )

#Compare the 2 values
if [ $expectedMD5 = $realMD5 ]
then
        echo 'OK !'
else
        echo 'NOT OK'
fi
    
por 26.02.2018 / 15:28
1

O que @ Félicien escreveu é a essência da resposta. Eu só queria adicionar que md5sum tem um modo verificação :

md5sum [OPTION]... [FILE]...

-c, --check
       read MD5 sums from the FILEs and check them

Você pode usá-lo da seguinte maneira. Supondo que f contenha o nome do arquivo,

md5sum -c <( echo "${f##*.}" $f )

imprime

foo.txt.f0ef7081e1539ac00ef5b761b4fb01b3: OK

Isso usa um truque de Bash conhecido como substituição de processo . Essencialmente, o comando executa primeiro

echo "${f##*.}" $f

que imprime

f0ef7081e1539ac00ef5b761b4fb01b3 foo.txt.f0ef7081e1539ac00ef5b761b4fb01b3

Mas como md5sum -c recebe a entrada de um arquivo, em vez da entrada padrão, a saída de echo precisa ser direcionada para um local temporário para que md5sum a ingerir, o que é feito com a construção <() .

    
por 28.02.2018 / 09:18