O GNU cmp
pode resolver o problema de maneira mais fácil:
cmp file1 file2
Existem quatro saídas possíveis (exceto algum tipo de erro).
-
Sem saída: os arquivos são idênticos.
-
cmp: EOF on file1
: file1 é um prefixo do arquivo2.
-
cmp: EOF on file2
: o arquivo2 é um prefixo do arquivo1.
-
file1 file2 differ: byte NNN, line MMM
: nenhum deles é um prefixo do outro.
Infelizmente, isso é um pouco complicado de usar em um script, já que esses casos não parecem ser diferenciados no código de saída. Além disso, as mensagens EOF on file1
vão para stderr, enquanto a mensagem file1 file2 differ
vai para stdout.
Presumo que outras versões de cmp
façam algo semelhante, mas não verifiquei.