Você pode especificar que o patch deve ser aplicado a um arquivo específico:
patch -i main.patch main_cli.cpp
Então, é simples o suficiente para fazer o loop de todos os arquivos:
for f in main_*.cpp; do patch -i main.patch "$f"; done
Exemplo:
$ diff -u bar foo > patch1
$ cp bar bar2
$ patch < patch1
patching file bar
$ patch -i patch1 bar2
patching file bar2
$ diff -s foo bar2
Files foo and bar2 are identical
Observe como patch -i patch1 bar2
corrigiu bar2
, mesmo que o arquivo de correção tenha especificado bar
.