desenv-web-rp.com

grep todos os arquivos .java em um diretório para uma determinada string

Como eu procuraria todos os arquivos .Java para uma string simples (não um regex) no diretório atual e todos os sub-diretórios no Mac OS X? Eu só quero imprimir uma lista de nomes de arquivo e diretório que correspondam.

12
John Topley

E o sempre popular

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

EDITAR (por Frank Szczerba):

Se você está lidando com nomes de arquivos ou diretórios que têm espaços neles, a maneira mais segura de fazer isso é:

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

Há sempre mais de uma maneira de fazer isso.

19
David Mackintosh

A resposta tradicional Unix seria a que foi aceita para esta pergunta:

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

Isso provavelmente funcionará para Java Arquivos, mas espaços nos nomes de arquivos são muito mais comuns no Mac do que no mundo tradicional Unix. Quando os nomes de arquivos com espaços são passados ​​através do pipeline acima, o Xargs interpretará o palavras individuais como nomes diferentes.

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

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

A alternativa é permitir que o encontro funcione grep para você, como a marca sugere, embora essa abordagem seja mais lenta se você estiver procurando um grande número de arquivos (como Grep é invocado uma vez por arquivo, em vez de uma vez com toda a lista de arquivos).

11
Frank Szczerba

Isso realmente usará um regex se você quiser, apenas fique longe dos metacharacters, ou escape deles, e você pode procurar por cadeias.

find . -iname "*.Java" -exec egrep -il "search string" {} \;
4
Mark Thalman
grep -rl --include="*.Java" simplestring *
3
js.

Como esta é uma questão OSX, aqui está uma resposta específica mais OSX.

Skip find e use Spotlight da linha de comando. Muito mais poderoso!

Spotlight da linha de comando - encontre se encontra grep

A maioria das pessoas não sabe que você pode fazer pesquisas de destaque na linha de comando. Por que lembrar de todas as opções Arcane Encontrar e Grep e o que não é quando você pode deixar o trabalho fazer o trabalho para você. A interface de linha de comando para o centro das atenções é chamada de mdfind. Tem toda a mesma energia que a pesquisa dos holofotes da GUI e mais porque é scriptable na linha de comando!

1
user22908

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

0
Mark Thalman
grep "(your string)" -rl $(find ./ -name "*.Java")

Se você quiser ignorar o caso, substitua -rl com -rl. (Sua string) também pode ser uma regex se você ver a necessidade.

0
laughing_man

Dê a isto:

grep -rl "string" */*Java
0
dwj