Команда diff может быть запрошена для вывода имен файлов, которые отличаются.
diff --quiet --recurse --unidirectional-new-file OLDDIR NEWDIR
Files old/main and new/main differ
Files old/main.cpp and new/main.cpp differ
Files old/Makefile and new/Makefile differ
Files old/sounds/popalien.wav and new/sounds/popalien.wav differ
Files old/sounds/saucer.wav and new/sounds/saucer.wav differ
Конечно, это не очень приятный вывод, но, поскольку вы ищете только НОВЫЕ файлы, которые нужно упаковать как патч, быстрый конвейер sed творит чудеса:
diff --quiet --recurse -unidirectional-new-file OLDDIR NEWDIR | \
sed "s/^.* and \(.*\) differ/\1/"
(не читается для читабельности)
new/main
new/main.cpp
new/Makefile
new/sounds/popalien.wav
new/sounds/saucer.wav
Пробелы вокруг 'и' и предшествующие 'отличаются'
ПОРЯДОК операндов для diff имеет значение, первый аргумент остается от 'и', второй - после. Остерегайтесь этого.
Кроме того, если вы удалите файл из NEWDIR, он не найдет его как заданный, только добавленные или измененные файлы. Чтобы также вывести имена файлов для файлов, не найденных ни в одном из подкаталогов, замените --unidirection-new-file на --new-file. (короткие опции существуют для всех, кроме --unidirectional ..)