Resposta adicional
Se não houver necessidade de saber quais partes dos arquivos são diferentes, você pode usar a soma de verificação do arquivo. Há muitas maneiras de fazer isso usando md5sum
ou sha256sum
. Basicamente, cada um deles gera uma string na qual um hash do conteúdo do arquivo. Se os dois arquivos forem iguais, o hash deles será o mesmo. Isso costuma ser usado quando você faz o download de software, como imagens iso de instalação do Ubuntu. Eles costumam ser usados para verificar a integridade de um conteúdo baixado.
Considere o script abaixo, em que você pode fornecer dois arquivos como argumentos e o arquivo informará se eles são iguais ou não.
#!/bin/bash
# Check if both files exist
if ! [ -e "" ];
then
printf "%s doesn't exist\n" ""
exit 2
elif ! [ -e "" ]
then
printf "%s doesn't exist\n" ""
exit 2
fi
# Get checksums of eithe file
file1_sha=$( sha256sum "" | awk '{print }')
file2_sha=$( sha256sum "" | awk '{print }')
# Compare the checksums
if [ "x$file1_sha" = "x$file2_sha" ]
then
printf "Files %s and %s are the same\n" "" ""
exit 0
else
printf "Files %s and %s are different\n" "" ""
exit 1
fi
Execução da amostra:
$ ./compare_files.sh /etc/passwd ./passwd_copy.txt
Files /etc/passwd and ./passwd_copy.txt are the same
$ echo $?
0
$ ./compare_files.sh /etc/passwd /etc/default/grub
Files /etc/passwd and /etc/default/grub are different
$ echo $?
1
Resposta mais antiga
Além disso, há o comando comm
, que compara dois arquivos classificados e fornece a saída em 3 colunas: coluna 1 para itens exclusivos do arquivo 1, coluna 2 dos itens exclusivos do arquivo 2 e coluna 3 dos itens presente em ambos os arquivos.
Para suprimir qualquer coluna, você pode usar os comutadores -1, -2 e -3. Usar -3 mostrará as linhas que diferem.
Abaixo, você pode ver a captura de tela do comando em ação.
Existe apenas um requisito - os arquivos devem ser classificados para serem comparados adequadamente. O comando sort
pode ser usado para essa finalidade. Abaixo está outra captura de tela, onde os arquivos são classificados e comparados. Linhas iniciando na esquerda para somente o arquivo_1, linhas iniciando na coluna 2 pertencem somente ao arquivo_2