Tentei pesquisar recursivamente um padrão em todos os arquivos .c da seguinte maneira
> grep -lr search-pattern *.c
Mas entendi isso como a saída
> grep: *.c: No such file or directory
Quando eu uso isso:
> grep -lr search-pattern *
Eu recebo bastante. arquivos c nos diretórios com o padrão.
O que há de errado com a expressão anterior?
--include=GLOB
opção. Em combinação com a opção recursiva, isso é muito poderoso e não requerfind
. Agradável!.
serve o final do comando.O
*.c
padrão é avaliado pelo seu shell. Isso se aplica ao diretório atual, como você usarials *.c
.Acho que o que você deseja é encontrar todos os arquivos correspondentes ao
*.c
padrão (recursivamente) egrep
procurar por você nele. Aqui está uma maneira de fazer isso:Ele usa
xargs
para acrescentar os resultados da pesquisa porfind
.Como alternativa, use a
-exec
opção para encontrar, por exemplo:Além disso, não tenho certeza se você realmente deseja a
-l
opçãogrep
. Parará na primeira partida:fonte
find/xargs
sintaxe é interrompida nos nomes de arquivos que contêm espaços. A-L
opção degrep
parar na primeira correspondência de cada arquivo e continuar com o próximo arquivo: se alguém quiser apenas ver se o padrão está contido pelo menos uma vez em cada arquivo, é mais rápido.-print0
opção exargs --null
.Sei que esse é um tópico bastante antigo, mas, como tive a mesma pergunta, quero compartilhar minha maneira preferida de obter o mesmo, de uma forma muito mais curta.
fonte