O executável crc32
que você está usando é um script Perl distribuído junto com o módulo Archive::Zip
Perl.
O script crc32
Perl é bem curto e tem essa pequena coisa:
if ( $file =~ /[^[:xdigit:]]([[:xdigit:]]{8})[^[:xdigit:]]/ ) {
my $filenameCrc = $1;
if ( lc($filenameCrc) eq lc($fileCrc) ) {
print("\tOK")
} else {
print("\tBAD $fileCrc != $filenameCrc");
}
}
Ou seja, se o nome do caminho do arquivo contiver oito dígitos hexadecimais consecutivos, precedidos e seguidos por pelo menos um dígito não hexadecimal, esse número hexadecimal será comparado com a soma de verificação CRC32 do arquivo.
No seu caso, você está executando crc32
on ./9836Feeding_the_dog_.mpeg
. Este nome de caminho contém alguns dígitos não hexadecimais ( ./
) seguidos por exatamente oito dígitos hexadecimais ( 9836Feed
) e, em seguida, algo não hexadecimal novamente. 9836Feed
não é a soma de verificação CRC32 do arquivo, então ele reclama.
Exemplo que aciona esse comportamento "não é BAD":
$ cat 261dafe6_file
12345
$ crc32 ./261dafe6_file
261dafe6 OK
Recriando seu teste e provocando a resposta "BAD" adicionando ./
na frente do nome do caminho do arquivo:
$ echo 12345 >9836Feeding_the_dog_.mpeg
$ crc32 9836Feeding_the_dog_.mpeg
261dafe6
$ crc32 ./9836Feeding_the_dog_.mpeg
261dafe6 BAD 261dafe6 != 9836Feed
Como o executável crc32
não está documentado, obviamente é um pouco estranho e não é amplamente usado (eu não sabia sobre isso e tinha que rastreá-lo, mas isso pode não dizer muito) eu sugeriria usar alguma outra ferramenta para calculando as somas de verificação dos arquivos. A ferramenta md5sum
do GNU coreutils é amplamente usada, e em sistemas BSD você pode usar md5
. Há também utilitários para calcular hashes mais strongs (SHA1, SHA256 e SHA512 e outros são suportados por utilitários disponíveis).
(Por "dígito não hexadecimal" quero dizer "algo que não é um dígito hexadecimal")