Comando para verificar os hashes CRC (CRC32) de forma recursiva

1

Com os comandos md5sum , sha1sum , sha256sum , posso pegar um arquivo de texto com um hash e um caminho por linha e verificar toda a lista de arquivos em um único comando, como sha1sum -c mydir.txt . (Esse arquivo de texto é fácil de produzir com um loop em find ou outro.)

Existe uma maneira de fazer o mesmo com uma lista de hashes CRC / CRC32?

Esses hashes costumam ser armazenados em arquivos semelhantes a zip, como o próprio ZIP ou o 7z. Por exemplo:

$ unzip -v archive.zip 
Archive:  archive.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
 8617812  Stored  8617812   0% 12-03-2015 15:20 13fda20b  0001.tif

Ou:

$ 7z l -slt archive.7z

Path = filename
Size = 8548096
Packed Size =
Modified = 2015-12-03 14:20:20
Attributes = A_ -rw-r--r--
CRC = B2F761E3
Encrypted = -
Method = LZMA2:24
Block = 0
    
por Nemo 18.12.2015 / 13:47

1 resposta

2

O utilitário crc32 não tem uma opção como -c do sha1sum . No entanto, a verificação pode ser feita em um script.

Digamos que armazenamos valores de crc32 no arquivo no mesmo formato, como sha1sum imprime valores:

a8374911 *file1.ext
32c5188e *file2
6592d5e5 *bflmpsvz

O crc32 pode ser verificado via script bash:

while read line
do 
   name=${line#* \*}
   crc32='crc32 "$name"'
   echo -n "$name: "
   if [ "${line% \**}" == "$crc32" ]
   then
      echo OK
   else
      echo FAILED
   fi
done < file_with_crc32

O script fornece a mesma saída que sha1sum -c . Ele itera sobre todas as linhas no arquivo file_with_crc32 e para cada linha

  • recupera o nome do arquivo da linha de leitura
  • calcula crc32
  • compara o valor calculado com o valor do arquivo
  • imprime o resultado
por 18.12.2015 / 20:24