Minha versão do GNU Grep tem um interruptor para isso:
grep -R --include='*.txt' $Pattern
Descrito da seguinte forma:
--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
Dado este exemplo de estrutura de pastas:
/folder1/file1.txt /folder1/file2.djd /folder2/file3.txt /folder2/file2.fha
Como faço uma pesquisa de texto recursiva em todos os arquivos *.txt
com grep
de "/"?
( "grep -r <pattern> *.txt"
falha quando executado a partir de "/", pois não há arquivos .txt
nessa pasta.)
Se você tiver um grande número de arquivos, seria útil incorporar xargs no comando para evitar um erro de 'Argument list too long'.
find . -name '*.txt' -print | xargs grep <pattern>
você pode usar a opção zsh
do seu EXTENDED_GLOB
( docs )
grep <pattern> **/*.txt
find . -name '*.txt' -type f -exec grep <pattern> {} \;
A resposta do mannis seria um novo processo grep para cada arquivo de texto. Se você tiver lotes de arquivos de texto, pode considerar usar o grepping em todos os arquivos primeiro e escolher os arquivos .txt quando isso for feito:
grep -r <pattern> * | grep \.txt:
Isso exige mais disco, mas pode ser mais rápido de qualquer maneira.
Você pode querer dar uma olhada no link , que tem recursos para selecionar arquivos para pesquisar por tipo de arquivo.