O *.c
padrão é avaliado pelo seu shell. Isso se aplica ao diretório atual, como você usaria ls *.c
.
Acho que o que você deseja é encontrar todos os arquivos correspondentes ao *.c
padrão (recursivamente) e grep
procurar por você nele. Aqui está uma maneira de fazer isso:
find . -name "*.c" -print0 | xargs --null grep -l search-pattern
Ele usa xargs
para acrescentar os resultados da pesquisa por find
.
Como alternativa, use a -exec
opção para encontrar, por exemplo:
find . -name "*.c" -exec grep -l search-pattern "{}" \;
Além disso, não tenho certeza se você realmente deseja a -l
opção grep
. Parará na primeira partida:
-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.)
--include=GLOB
opção. Em combinação com a opção recursiva, isso é muito poderoso e não requerfind
. Agradável!