Stephen Harris deu uma resposta muito boa
para a versão anterior desta questão .
Infelizmente, não pode lidar com o caso patológico
de nomes de arquivos com novas linhas neles.
Aqui está uma pequena adaptação de sua resposta que trata desse caso.
(Eu também mudei para usar cat -n
em vez de nl
,
e usar a opção -y
para diff
.)
find folder1 -type f -exec bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash {} +
Como você solicitou uma solução xargs
em um comentário sobre a resposta de Stephen,
aqui vai você:
find folder1 -type f -print0 | xargs -0 bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash
Observe que esses comandos devem ser feitos em bash
,
porque o shell POSIX não suporta
%código%,
e a solução ${parameter/pattern/string}
deve ser feita no GNU-land,
porque o POSIX não suporta xargs
ou find -print0
.
(Claro, você poderia substituir xargs -0
por -print0
e descartar o -print
,
mas você perderia a capacidade de lidar com nomes de arquivos
com novas linhas nelas.)