Eu acho que você poderia ir usando 3 ferramentas: cmp é melhor para arquivos binários e diff é melhor para arquivos de texto. Para arquivos binários, a diferença apenas informa se eles diferem ou não. O diff funciona também para diretórios. Qualquer um dos dois primeiros poderia realizar o que você precisa em silêncio. Diff usa a opção - q e cmp usa a opção - s para dizer-lhe apenas um código de retorno: 0 se os dois arquivos coincidirem 1 se não. Cmp também tem uma ótima opção para evitar (tipo de) ler todo o arquivo (bom se você tiver arquivos grandes): se você sabe que os arquivos podem ser diferentes nas primeiras N linhas ou entre a linha N e M você poderia fazer (ou seja, para Linha N 10 e M 20): adicionei md5sum à lista, porque se você tiver a chance de calcular a soma de verificação MD5 toda vez que você editar um desses arquivos, então você poderia comparar apenas isso para encontrar rapidamente se eles combinam ou não. Neste caso, suponho que você tenha muitos arquivos para comparar. Respondeu 25 de outubro 10 em 9: 231.7 Arquivos binários e forçando comparações de texto Se o diff pensa que qualquer um dos dois arquivos que está comparando é binário (um arquivo não-texto), ele normalmente trata esse par de arquivos como se o formato de saída de resumo Tinha sido selecionado (veja Breve), e relata apenas que os arquivos binários são diferentes. Isso ocorre porque as comparações de linha a linha geralmente não são significativas para arquivos binários. Isso não conta como problema, mesmo que a saída resultante não capture todas as diferenças. Diff determina se um arquivo é texto ou binário ao verificar os primeiros poucos bytes no arquivo, o número exato de bytes depende do sistema, mas normalmente é vários milhares. Se cada byte naquela parte do arquivo não for nulo, diff considera o arquivo ser texto, caso contrário ele considera o arquivo como binário. Às vezes, você pode querer forçar o diff para considerar arquivos serem texto. Por exemplo, você pode estar comparando arquivos de texto que contêm caracteres nulos. Dif diferencialmente decidirá que esses não são arquivos de texto. Ou você pode estar comparando documentos que estão em um formato usado por um sistema de processamento de texto que usa caracteres nulos para indicar formatação especial. Você pode forçar o diff a considerar todos os arquivos como arquivos de texto e compará-los linha a linha, usando a opção --text (-a). Se os arquivos que você compara usando esta opção na verdade não contêm texto, eles provavelmente conterão poucos caracteres de nova linha, e a saída de difessão consistirá em pedaços mostrando diferenças entre linhas longas de qualquer personagem que os arquivos contenha. Você também pode forçar o diff para informar apenas se os arquivos são diferentes (mas não como). Use a opção --brief (-q) para isso. Nos sistemas operacionais que distinguem entre texto e arquivos binários, o diff normalmente lê e grava todos os dados como texto. Use a opção --binary para forçar o diff para ler e escrever dados binários. Esta opção não tem efeito em um sistema compatível com POSIX como o GNU ou o Unix tradicional. No entanto, muitos sistemas operacionais de computadores pessoais representam o fim de uma linha com um retorno de carro seguido por uma nova linha. Em tais sistemas, diff normalmente ignora esses retornos de carro na entrada e os gera no final de cada linha de saída, mas com a opção --binary option trata cada retorno de carro como apenas outro caractere de entrada e não gera um retorno de carro no Fim de cada linha de saída. Isso pode ser útil quando se trata de arquivos não-texto que devem ser trocados com sistemas compatíveis com POSIX. O --strip-trailing-cr causa diff para tratar as linhas de entrada que terminam no retorno do carro seguido por newline como se eles terminassem em uma nova linha simples. Isso pode ser útil ao comparar texto importado imperfeitamente de muitos sistemas operacionais de computadores pessoais. Esta opção afeta o modo como as linhas são lidas, o que, por sua vez, afeta a forma como elas são comparadas e produzidas. Se você deseja comparar dois bytes de arquivo por byte, você pode usar o programa cmp com a opção --verbose (-l) para mostrar os valores de cada byte diferente nos dois arquivos. Com GNU cmp. Você também pode usar a opção - b ou --print-bytes para mostrar a representação ASCII desses bytes. Consulte Invocando cmp. Para maiores informações. Se o diff3 pensa que qualquer um dos arquivos que está comparando é binário (um arquivo que não é de texto), ele normalmente relata um erro, porque essas comparações normalmente não são úteis. Diff3 usa o mesmo teste que diff para decidir se um arquivo é binário. Tal como acontece com o diff. Se os arquivos de entrada contiverem alguns bytes que não sejam de texto, mas, de outra forma, são como arquivos de texto, você pode forçar o diff3 a considerar todos os arquivos como arquivos de texto e compará-los linha a linha usando a opção - a ou - text. As formas mais comuns de determinar se dois arquivos são idênticos (assumindo que seus tamanhos correspondem) está usando um programa para criar um hash (essencialmente uma impressão digital) de um arquivo. Os mais comuns são md5sum e sha1sum. Se você tem muitos arquivos que você precisa verificar, por exemplo, se você estiver transferindo um diretório cheio de arquivos de um sistema para outro, você pode redirecionar a saída do sistema original para um arquivo, então md5sum sha1sum pode usar esse arquivo automaticamente para Diga-lhe quais arquivos são diferentes: respondido 29 de abril 10 às 12:21 MD5 nem sempre é confiável para isso: diggsecurityhellip ndash Jon Cage 29 de abril 10 às 12:30 Na verdade, o MD5 é confiável para verificações básicas de integridade. Isso simplesmente não é considerado criptográfico forte como pensamos anteriormente. Se você está preocupado com os hackers, não use o MD5, mas se você quiser saber se alguns arquivos copiados de um CD ficaram corrompidos, ou se o compilador custam arquivos idênticos sempre que o MD5 é mais que adequado. Ndash Adam Batkin 29 de abril 10 às 12: 55 Eu prefiro VBinDiff. O DHEX está usando a CPU mesmo quando está em marcha lenta, acho que é redesenhando o tempo todo ou algo assim. Todavia, o VBinDiff não trabalha com terminais amplos. Mas os endereços tornam-se estranhos com terminais largos, pois você tem mais de 16 bytes por linha. Ndash Janus Troelsen 17 de outubro 12 às 14:22 Experimente a diferença na seguinte combinação de substituição de processo zshbash e colordiff na CLI: - y mostra diferenças lado a lado (opcional) xxd é ferramenta CLI para criar uma saída hexdump do binário Arquivo colordiff irá colorir a saída diff (instalar via: sudo apt-get install colordiff) adicionar - W200 para diff para saída mais ampla se os arquivos forem grandes, adicionar limite (por exemplo, - l1000) para cada método xxd que funciona para exclusão de adição de bytes Saída para Uma única remoção de byte NUL no 100º byte de um arquivo grande: se você também deseja ver a versão ASCII do personagem: Testado no Ubuntu 14.04. Eu prefiro od over xxd porque: é POSIX. Xxd não é (vem com o Vim) tem o - An para remover a coluna do endereço sem awk. - An remove a coluna do endereço. Isso é importante caso contrário, todas as linhas diferirem após uma remoção de adição de bytes. - w1 coloca um byte por linha, de modo que diff pode consumi-lo. É crucial ter um byte por linha, ou então cada linha após uma deleção se tornaria fora de fase e diferiria. Infelizmente, isso não é POSIX, mas presente no GNU. - tx1 é a representação que deseja, mude para qualquer valor possível, desde que mantenha 1 byte por linha. - v impede a abreviatura de repetição de asterisco que pode interferir com a pasta diff - d - - junta-se a cada duas linhas. Precisamos porque o hex e ASCII entraram em linhas adjacentes separadas. Tirado de: stackoverflowquestions8987257concatenating-each-other-line-with-the-next usamos parênteses () para definir bdiff em vez de limitar o escopo da função interna f. Veja também: stackoverflowquestions8426077how-to-define-a-function-inside-another-function-in-bash answer Apr 4 15 at 20:31 Quando usar hexdumps e diff de texto para comparar arquivos binários, especialmente xxd. As adições e remoções de bytes tornam-se mudanças no endereçamento, o que dificulta a visualização. Esse método informa xxd para não emitir endereços e para produzir apenas um byte por linha, o que, por sua vez, mostra exatamente quais bytes foram alterados, adicionados ou removidos. Você pode encontrar os endereços mais tarde procurando as seqüências interessantes de bytes em um hexdump mais normal (saída de xxd first. bin). Respondeu 22 de abril 15 às 12:10
No comments:
Post a Comment