Эти два цикла используют diff -qr
чтобы сделать начальный diff, главным образом, чтобы легко получить имена файлов, а затем выполнить отдельный diff для найденной пары файлов. sed
используется для очистки первых N строк или для сохранения только первых N строк. Сначала очистите N строк:
N=2
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do diff --label "$a" --label "$b" -u <(sed "1,${N}s/.*//" <"$a") <(sed "1,${N}s/.*//" <"$b")
done
И это, чтобы сохранить N:
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do diff --label "$a" --label "$b" -u <(sed -n "1,${N}p" <"$a") <(sed -n "1,${N}p" <"$b")
done
Это предполагает отсутствие пробелов / табуляций в именах файлов.