Como comparar o conteúdo de dois arquivos?

1

Eu tenho uma missão para comparar o conteúdo de centenas de arquivos de pares. Eu tenho que comparar rapidamente cada par e fornecer uma resposta se esse par for igual (no conteúdo) ou não. Os arquivos podem ser arquivos de texto ou binários. Você pode me ajudar por favor?

  1. Estou procurando um comando que funcione em TODAS as edições UNIX \ Linux
  2. Eu preferiria usar o comando mais eficiente (em relação a tempo e desempenho)
  3. Eu preferiria um comando que suporte arquivos de texto e binários
  4. Eu preferiria um comando instalado como parte do sistema operacional (não de terceiros)

Obrigado!

    
por mosh 27.10.2013 / 08:14

2 respostas

7

Se tudo o que você precisa saber é se os arquivos são diferentes ou não, use cmp . Ou, mais precisamente:

if cmp "$FILE1" "$FILE2"; then
  echo same
else
  echo different
fi

(Ou o que você precisa fazer quando eles são iguais / não iguais). cmp deve estar presente em qualquer sistema do tipo posix, funciona em arquivos binários e de texto e retorna imediatamente quando encontra uma diferença, que é o mais rápido possível. (Além disso, como não é compatível com a linha, não perde tempo em encontrar terminações de linha.)

    
por 27.10.2013 / 08:25
3
O comando

diff deve fazer o trabalho. Use-o com a opção -q para imprimir apenas os nomes dos arquivos que diferem em seus conteúdos.

diff -q file1 file2

Se você quiser arquivos inteiros em um par de diretórios, adicione -r option

diff -r -q dir1 dir2

Consulte a documentação para mais detalhes, digitando man diff

    
por 27.10.2013 / 11:59

Tags