Может быть, я не понимаю, но если бы вы просто начали свой процесс, сидя "в / tmp"
предоставление diff
относительного пути - разве это не сработает? Кажется, работает на меня
(p.s. не знал, каков ваш внешний цикл или разница между $ i & $ j, поэтому использовал мой собственный пример с деревом FLAT)
cd /tmp
for i in a/*; do
diff -u "${i}" "b/${i#a/}" > "/tmp/patch/${i#a/}.patch"
done