Sugiro usar a opção --include
de grep
:
grep -lr --include='*.c' search-pattern .
Eu tentei pesquisar recursivamente um padrão em todos os arquivos .c da seguinte maneira
> grep -lr search-pattern *.c
Mas entendi como a saída
> grep: *.c: No such file or directory
Quando eu uso isso:
> grep -lr search-pattern *
Eu tenho bastante. c arquivos nos diretórios com o padrão.
O que há de errado com a expressão anterior?
Sugiro usar a opção --include
de grep
:
grep -lr --include='*.c' search-pattern .
O padrão *.c
é avaliado pelo seu shell. Aplica-se ao diretório atual, assim como você usaria ls *.c
.
Acho que o que você deseja é encontrar todos os arquivos correspondentes ao padrão *.c
(recursivamente) e ter grep
procurando por você nele. Aqui está uma maneira de fazer isso:
find . -name "*.c" -print0 | xargs --null grep -l search-pattern
Ele usa xargs
para anexar os resultados da pesquisa por find
.
Como alternativa, use a opção -exec
para encontrar, por exemplo:
find . -name "*.c" -exec grep -l search-pattern "{}" \;
Além disso, não tenho certeza se você realmente quer que a opção -l
seja grep
. Parará no primeiro jogo:
-l, --files-with-matches
Suppress normal output; instead print the name of each
input file from which output would normally have been
printed. The scanning will stop on the first match.
(-l is specified by POSIX.)
Tags grep