Com o GNU grep e xargs :
grep -rlZ search-text some/dir/ | xargs -r0 cat > dump.test
-l é listar os arquivos que contêm pelo menos uma linha que corresponde ao search-text . -Z é imprimir essa linha delimitada por NUL para que possa ser passada com segurança para xargs -0 .
-r para pesquisar em todos os arquivos dentro de some/dir/ recursivamente.
POSIXly:
find some/dir -type f -size +0 -exec grep -q search-text {} \;
-exec cat {} + > dump.test
Isso será menos eficiente, pois isso significa executar um comando grep por arquivo não vazio.