com zsh :
ext='(txt|tsv|text|log)'
for f (**/*.$~ext(.)) cat < $f >> $f:t:r.merged
A ordem de mesclagem será alfabética dentro de um mesmo diretório. Ou seja, a/file.txt será incluído antes de b/file.txt e a/file.log antes de a/file.txt .
Observe também que arquivos ocultos (aqueles cujo nome começa com . ) não serão considerados (adicione o qualificador D glob se você quiser).