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 .