Pesquisa de texto recursivo com padrões grep e file

44

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.)

    
por Anders Sandvig 19.05.2009 / 13:38

6 respostas

58

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).

    
por 19.05.2009 / 14:01
18

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>
    
por 19.05.2009 / 14:02
1

você pode usar a opção zsh do seu EXTENDED_GLOB ( docs )

grep <pattern> **/*.txt
    
por 13.05.2016 / 09:22
0
find . -name '*.txt' -type f -exec grep <pattern> {} \;
    
por 19.05.2009 / 13:43
0

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.

    
por 19.05.2009 / 13:46
0

Você pode querer dar uma olhada no link , que tem recursos para selecionar arquivos para pesquisar por tipo de arquivo.

    
por 03.05.2010 / 18:54