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.