Você pode procurar em ack .
Acabei de começar a usá-lo, mas parece bem adequado para isso.
Eu uso muito o grep recursivo para encontrar arquivos fonte com conteúdo específico.
grep -Rni "myfunc" .
Em bases de código grandes, isso pode ficar lento, então eu uso --incldue para restringir / extensões de lista branca.
grep -Rni --include=*.java "myfunc" .
No entanto, seria mais eficiente excluir (remover) subdiretórios inteiros, estou pensando:
grep -Rni --exclude=/.svn/ "myfunc" .
Mas o --exclude suporta apenas padrões de arquivo como * .java acima. Como posso excluir diretórios?
Você pode procurar em ack .
Acabei de começar a usá-lo, mas parece bem adequado para isso.
grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data
Fonte: link
você pode usar a localização:
find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print
OK, então é um pouco para trás, você obtém os resultados do grep primeiro e então o caminho. Talvez alguém mais tenha uma resposta melhor?
Aqui está um exemplo completo de um script em um dos meus projetos que podem ajudar, eu chamo esse arquivo de "all_source" (marcado como executável) e o coloco no diretório raiz do meu projeto e o chamo como grep myfunc $(./all_source)
do tipo no final do roteiro é totalmente opcional.
#!/bin/bash
find . \
-type d \( \
-wholename './lib' -o \
-wholename './vc6' -o \
-name 'gen' -o \
-name '.svn' \
\) -prune -o \
-type f \( \
-name '*.h' -o \
-name '*.cpp' -o \
-name '*.c' -o \
-name '*.lua' -o \
-name '*.*awk' \) -print \
| sort
Esse script retorna todos os nomes de arquivo no projeto que correspondem a *.h, *.cpp, *.c, *.lua, *.*awk
, mas não pesquisa em todas as pastas chamadas .svn e gen, além de pular as pastas para ./lib
e ./vc6
(mas apenas os que estão fora da raiz do projeto). Então, quando você faz o grep myfunc $(./all_source)
, ele só usa esses arquivos. Você precisará chamar isso do diretório raiz do projeto também.
Existe também a opção -prune para encontrar:
find . -path "*/.svn*" -prune -o -not -type d -exec grep -ni "myfunc" {} \; -print
Você pode tentar fazer isso:
grep -R "myfunc" . | grep -v path_to_exclude/
Por exemplo: se você não quiser pesquisar o conteúdo em arquivos de log, faça o seguinte:
grep -R "myfunc" . | grep -v log/
Tags command-line grep linux