Gerando / validando somas de verificação em uma única linha?

3

Quando eu gero somas de verificação para meus arquivos, preciso fazer um pouco de trabalho extra para formatá-los corretamente:

CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" > "$file.sha"

Isso é para garantir que no arquivo eu tenha apenas a soma de verificação (portanto, cut ) e que, no final do arquivo, não haja nova linha (daí echo -n ).

A validação dos checksums também requer um pouco mais de trabalho:

CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" | diff - "$file.sha"

Existe uma maneira mais fácil e compacta de criar e validar somas de verificação sem armazenar o caminho? Prefiro não armazenar o caminho na soma de verificação junto com o arquivo, pois ele torna os arquivos IMO menos portáteis.

    
por Naftuli Kay 28.04.2014 / 21:19

1 resposta

4

Uma pequena melhoria óbvia para

CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" > "$file.sha"

é:

shasum "$file" | cut -b 1-40 >"$file.sha"

A nova linha à direita por cut pode ser evitada com 'awk:

shasum "$file" | awk -v ORS="" '{print $1}'

Uma forma mais simples de

CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" | diff - "$file.sha"

é:

if [ "$(shasum "$file" | cut -b 1-40)" = "$(<"$file.sha")" ]; then ...
    
por 28.04.2014 / 21:32