O grep recursivo falha para arquivos * .c

9

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?

    
por Jay 14.07.2013 / 16:03

2 respostas

15

Sugiro usar a opção --include de grep :

grep -lr --include='*.c' search-pattern .
    
por enzotib 14.07.2013 / 16:09
3

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.)
    
por gertvdijk 14.07.2013 / 16:06

Tags