Eu tenho um arquivo baixado com sucesso e outro com falha no download (apenas os primeiros 100 MB de um arquivo grande) que suspeito ser o mesmo arquivo.
Para verificar isso, gostaria de verificar seus hashes, mas como tenho apenas uma parte do arquivo baixado sem êxito, quero apenas fazer o hash dos primeiros megabytes.
Como eu faço isso?
O sistema operacional seria o Windows, mas eu tenho o Cygwin e o MinGW instalados.
Respostas:
Criar hashes para comparar arquivos faz sentido se você comparar um arquivo com muitos ou quando comparar muitos arquivos entre si.
Não faz sentido ao comparar dois arquivos apenas uma vez: O esforço para calcular os hashes é pelo menos tão alto quanto caminhar sobre os arquivos e compará-los diretamente.
Uma ferramenta eficiente de comparação de arquivos é
cmp
:Você também pode combiná-lo com
dd
para comparar partes arbitrárias (não necessariamente desde o início) de dois arquivos, por exemplo:fonte
cmp
é certo que 99,99% já estará instalado se você estiverbash
executando, e ele faz o trabalho. De fato,cmp -n 131072 one.zip two.zip
também fará o trabalho. Menos caracteres para digitar e execução mais rápida. Calcular um hash não faz sentido. Ele exige a leitura de todo o arquivo de 100 MB, além de uma parte de 100 MB do arquivo completo, o que é inútil. Se forem arquivos zip e forem diferentes, haverá uma diferença nas primeiras centenas de bytes. No entanto, o Readahead fornece 128k por padrão, para que você possa comparar 128k (o mesmo custo que comparar 1 byte).--bytes
opção está apenas complicando a tarefa. Basta executarcmp
sem essa opção e ele mostrará o primeiro byte que difere entre os arquivos. Se todos os bytes forem iguais, será exibidoEOF
no arquivo mais curto. Isso fornecerá mais informações do que o seu exemplo - quantos bytes estão corretos.cmp
(e, acho que praticamente todo mundo), você pode usar argumentos--ignore-initial
e--bytes
não complicar as coisas com invocações dedd
.Me desculpe, eu não posso exatamente tentar isso, mas desta forma vai funcionar
Isso lhe dará os primeiros 100 megabytes de ambos os arquivos.
Agora pegue os hashes:
Você também pode executá-lo diretamente:
fonte
cmp
).cmp
) é um vencedor sem dúvida. Mas essa maneira de resolver o problema (usando hashes) também tem o direito de existir enquanto ele realmente resolver o problema (:Todo mundo parece seguir a rota Unix / Linux com isso, mas apenas comparar dois arquivos pode ser feito facilmente com os comandos padrão do Windows:
FC /B file file2
O FC está presente em todas as versões do Windows NT já criadas. E (se bem me lembro) também estava presente no DOS.
É um pouco lento, mas isso não importa para o uso único.
fonte
Você pode apenas comparar diretamente os arquivos, com um programa binário / hex diff
vbindiff
. Ele compara rapidamente arquivos de até 4 GB no Linux e Windows.Parece algo assim, apenas com a diferença destacada em vermelho (1B vs 1C):
fonte
vbindiff
(e Konradcmp
) compara dados binários, byte por byte. Na verdade tem valores são muito mais propensos a colisões experiênciaEu sei que diz para Bash, mas OP também afirma que eles têm Windows. Para quem quer / requer uma solução do Windows, existe um programa chamado HxD, que é um editor hexadecimal que pode comparar dois arquivos. Se os arquivos tiverem tamanhos diferentes, será informado se as peças disponíveis são as mesmas. E, se necessário, é capaz de executar somas de verificação para o que estiver selecionado no momento. É gratuito e pode ser baixado no site HxD . Não tenho nenhuma conexão com o (s) autor (es), apenas uso-o há anos.
fonte
O cmp informará quando dois arquivos são idênticos até o tamanho do arquivo menor:
O cmp está dizendo que a comparação encontrou um EOF no arquivo a antes de detectar qualquer diferença entre os dois arquivos.
fonte