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.