grep todos os arquivos .java em um diretório para uma string específica

12

Como eu procuraria todos os arquivos .java por uma string simples (não uma regex) no diretório atual e em todos os subdiretórios no Mac OS X? Eu só quero imprimir uma lista de nomes de arquivos e diretórios que correspondam.

    
por John Topley 15.07.2009 / 22:06

9 respostas

18

E o sempre popular

find . -name '*.java' | xargs grep -l 'string'

EDIT (por Frank Szczerba):

Se você estiver lidando com nomes de arquivos ou diretórios que contenham espaços, a maneira mais segura de fazer isso é:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

Sempre há mais de uma maneira de fazer isso.

    
por 15.07.2009 / 22:13
11

A resposta tradicional do UNIX seria aquela que foi aceita para esta pergunta:

find . -name '*.java' | xargs grep -l 'string'

Isso provavelmente funcionará para arquivos Java, mas espaços em nomes de arquivos são muito mais comuns no Mac do que no mundo tradicional do UNIX. Quando nomes de arquivos com espaços são passados pelo pipeline acima, os xargs interpretarão as palavras individuais como nomes diferentes.

O que você realmente quer é separar os nomes para tornar os limites não ambíguos:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

A alternativa é deixar o find grep rodar para você, como Mark sugere, embora essa abordagem seja mais lenta se você estiver pesquisando um grande número de arquivos (como grep é invocado uma vez por arquivo ao invés de uma vez com toda a lista de arquivos).

    
por 31.07.2009 / 17:24
6

Use o grep melhor que o grep, ack :

ack -l --java  "string" 
    
por 15.07.2009 / 22:23
4

Isto irá realmente usar um regex se você quiser, apenas fique longe dos metacaracteres, ou escape deles, e você pode procurar por strings.

find . -iname "*.java" -exec egrep -il "search string" {} \;
    
por 15.07.2009 / 22:10
3
grep -rl --include="*.java" simplestring *
    
por 07.08.2009 / 00:31
1

Como essa é uma pergunta do OSX, aqui está uma resposta mais específica do OSX.

Ignore find e use Spotlight na linha de comando. Muito mais poderoso!

LINHA DE COMANDO EM DESTAQUE - ENCONTRE-SE PARA GREP

Most people don’t know you can do Spotlight searches from the command line. Why remember all the arcane find and grep options and what not when you can let Spotlight do the work for you. The command line interface to Spotlight is called mdfind. It has all the same power as the GUI Spotlight search and more because it is scriptable at the command line!

    
por 10.10.2011 / 22:41
0

Faça isso:

grep -rl "string" */*java
    
por 15.07.2009 / 22:09
0
grep "(your string)" -rl $(find ./ -name "*.java")

Se você quiser ignorar o caso, substitua -rl por -irl. (sua string) também pode ser um regex se você ver a necessidade.

    
por 12.11.2013 / 04:48
-1

Você também pode usar um programa de GUI como TextWrangler para fazer uma pesquisa mais intuitiva onde as opções estão na interface .

    
por 15.07.2009 / 22:13