Поскольку вы передаете -d dir («Немедленно перейдите в каталог dir, прежде чем делать что-либо еще.»), Вам также нужно указать patch для удаления одного уровня каталогов с помощью -p:
diff -Nur extern/ local/ | patch -d extern -p1
Это потому, что вывод diff будет выглядеть примерно так:
+++ extern/foo.x
--- local/foo.x
@@ -21,7 +21,9 @@
- yyy
+ xxx
... поэтому вам нужно избавиться от этого первого префикса в пути.