Há um limite de quanto de código portátil você pode escrever sem ter condicionais para executar coisas diferentes em sistemas diferentes. Não se sinta mal em usar dircmp
se disponível ou GNU diff se disponível.
if type dircmp >/dev/null 2>/dev/null; then
dircmp dir1 dir2
else
diff -r dir1 dir2
fi
Se você deseja apenas saber quais arquivos foram alterados e não se importa com o conteúdo da listagem, é possível filtrar a diff
de saída para reter apenas as linhas de cabeçalho. (Atenção: se você tem nomes de arquivos com novas linhas, a saída pode ser incomparável).
diff -r dir1 dir2 | grep -v '^[<>0-9]'
Faça com que grep -v '[^<>]'
mantenha informações sobre o intervalo de linhas alteradas, mas ainda filtre o conteúdo das linhas alteradas.