Qual é a maneira mais fácil (usando uma ferramenta gráfica ou linha de comando no Ubuntu Linux) para saber se dois arquivos binários são iguais ou não (exceto os carimbos de hora)? Na verdade, não preciso extrair a diferença. Eu só preciso saber se eles são iguais ou não.
186
cmp
diz especificamente que ele faz uma comparação de byte a byte, de modo que é o meu padrão para 2 arquivos binários.diff
é linha por linha e fornecerá a mesma resposta Sim / Não, mas é claro que não será o mesmo despejo para o fluxo de saída padrão. Se as linhas são longas, porque talvez não sejam arquivos de texto, eu prefeririacmp
.diff
tem a vantagem de poder especificar uma comparação de diretórios e a-r
recursão for, comparando vários arquivos em um comando.Respostas:
O unix padrão
diff
mostrará se os arquivos são iguais ou não:Se não houver saída do comando, significa que os arquivos não têm diferenças.
fonte
diff: memory exhausted
ao comparar dois arquivos 13G.diff
está dizendo que eles são "binários". Como todos os arquivos podem ser considerados binários, é uma afirmação estranha.diff -s 1.bin 2.bin
oudiff --report-identical-files 1.bin 2.bin
Isto mostraFiles 1.bin and 2.bin are identical
Use o
cmp
comando Isso sairá corretamente se eles forem binários iguais ou será impresso onde a primeira diferença ocorre e sairá.fonte
cmp
é mais eficiente quediff
. Então, eu prefiro isso.cmp $1 $2 && echo "identical" || echo "different"
cmp
tem modo "silencioso":-s, --quiet, --silent
-suppress all normal output
. Ainda não testei, mas acho que isso irá parar na primeira diferença, se houver.Achei que Visual Binary Diff era o que eu estava procurando, disponível em:
Ubuntu:
Arch Linux:
Mac OS X via MacPorts :
Mac OS X via Homebrew:
fonte
Use sha1 para gerar soma de verificação:
fonte
diff
ecmp
ambos lhe dirão se eles diferem sem nenhum esforço extra.sha1sum
vez desha1
?Acabei usando o hexdump para converter os arquivos binários em uma representação hexadecimal e os abri em meld / kompare / qualquer outra ferramenta diff. Ao contrário de você, eu estava atrás das diferenças nos arquivos.
fonte
hexdump -v -e '/1 "%02x\n"'
se quiser diferenciar e ver exatamente quais bytes foram inseridos ou removidos.Você pode usar a função de hash MD5 para verificar se dois arquivos são iguais, com isso você não consegue ver as diferenças em um nível baixo, mas é uma maneira rápida de comparar dois arquivos.
Se os dois hashes MD5 (a saída do comando) forem os mesmos, os dois arquivos não serão diferentes.
fonte
Use o comando cmp. Consulte Arquivos binários e forçando comparações de texto para obter mais informações.
fonte
-b
não compara arquivos no "modo binário". Na verdade, "Com o GNUcmp
, você também pode usar a opção-b
ou--print-bytes
para mostrar a representação ASCII desses bytes.". Foi exatamente isso que encontrei usando o URL do manual que você forneceu.cmp
é inerentemente uma comparação binária na minha opinião. A-b
opção apenas imprime o primeiro byte diferente.Para encontrar defeitos na memória flash, tive que escrever este script que mostra todos os blocos de 1K que contêm diferenças (não apenas o primeiro como o
cmp -b
faz)Resultado:
Disclaimer: Eu hackeei o script em 5 min. Ele não suporta argumentos de linha de comando nem espaços em nomes de arquivos
fonte
sh -x
para depuraçãoreadlink -f $(which sh)
/bin/dash
. Atualmente criando colar em pastebin.A diferença com as seguintes opções faria uma comparação binária para verificar se os arquivos são diferentes e produziria se os arquivos fossem os mesmos:
Se você estiver comparando dois arquivos com o mesmo nome em diretórios diferentes, poderá usar este formulário:
OS X El Capitan
fonte
Tente diff -s
Resposta curta: corra
diff
com o-s
interruptor.Resposta longa: leia abaixo.
Aqui está um exemplo. Vamos começar criando dois arquivos com conteúdo binário aleatório:
Agora vamos fazer uma cópia do primeiro arquivo:
Agora test1.bin e test2.bin devem ser diferentes:
... e test1.bin e copyoftest1.bin devem ser idênticos:
Mas espere! Por que não há saída?!?
A resposta é: isso ocorre por design. Não há saída em arquivos idênticos.
Mas existem códigos de erro diferentes:
Agora, felizmente, você não precisa verificar os códigos de erro todas as vezes, porque pode usar a opção
-s
(ou--report-identical-files
) para tornar o diff mais detalhado:fonte
Experimente o
radiff2
que faz parte doradare2
desmontador. Por exemplo, com este comando:Você obtém duas colunas bastante formatadas, onde as diferenças são destacadas.
fonte
Meus favoritos usando o xxd hex-dumper do pacote vim:
1) usando vimdiff (parte do vim)
2) usando diff
fonte
Se o md5sum for o mesmo, os binários serão os mesmos
Por exemplo
fonte
diff
, sobre a qual não há razão para preferir.Existe uma maneira relativamente simples de verificar se dois arquivos binários são iguais.
Se você usa entrada / saída de arquivo em uma linguagem de programação; você pode armazenar cada bit dos dois arquivos binários em suas próprias matrizes.
Nesse ponto, a verificação é tão simples quanto:
fonte