Pelo menos com versões recentes do GNU grep , você pode usar padrões glob em um argumento --include
grep -Hrn --include="*.[ch]" PATTERN .
[No grep grep > 2.11 você pode omitir o diretório inicial explícito . ao usar -r ]
É possível pesquisar recursivamente e com um determinado padrão de arquivo?
Estou tentando fazer o equivalente a
find ./ -name "*.[c|h]" -exec grep -Hn PATTERN {} \;
Obviamente, você pode usar o flag -r do grep, mas quando eu especificar um padrão de nome de arquivo como:
grep -Hn -r PATTERN *.c
Ele procura apenas arquivos * .c no diretório atual, não de forma recursiva.
Eu encontrei isso, mas ele não fala sobre como especificar nomes de arquivos: greping recursivo vs find / -tipo f -exec grep {} \; Qual é mais eficiente / mais rápido?
Pelo menos com versões recentes do GNU grep , você pode usar padrões glob em um argumento --include
grep -Hrn --include="*.[ch]" PATTERN .
[No grep grep > 2.11 você pode omitir o diretório inicial explícito . ao usar -r ]
O *.c é expandido pelo shell antes que grep seja executado. Com um shell de fantasia adequada (por exemplo, ZSH, possivelmente com extendedglob set), pode-se pré-expandir recursivamente via algo como
grep bla **/*.[ch]
Mas isso é uma solução shell. Outras soluções seriam examinar o suporte à detecção de arquivos em ferramentas como o pesquisador de prata , codesearch , ripgrep .