Eu uso muito o grep recursivo para encontrar arquivos de origem com conteúdo específico.
grep -Rni "myfunc" .
Em grandes bases de código, isso pode ficar lento, então eu uso --incldue para restringir / adicionar extensões à lista de permissões.
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?
linux
command-line
grep
gabor
fonte
fonte
Fonte: https://stackoverflow.com/questions/2799246/grep-excluding-a-specific-folder-using
fonte
./dev
será excluído junto com./foo/bar/dev
. Use--exclude-dir=./dev
para aplicar apenas ao primeiro caso.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
O único problema com o globbing é que não consigo fazê-lo funcionar no meu bash. Nesse caso, tenho que mantê-los separados.{}
uma única entrada, provavelmente precisará de uma vírgula unária para transformá-la em uma matriz (não sabe como o Bash lida com isso). Em vez de fazer isso, acabei criando um alias em meus .bash_aliases que percorre uma lista de pastas que normalmente sempre desejo excluir, por exemplo, .git, .svn, .hg, .cache e os adiciono por meio de um loop com--exclude-dir $dir
e expanda essa matriz para o alias grep.você pode usar o find:
OK, então, um pouco para trás, você obtém os resultados grep primeiro e depois o caminho. Talvez alguém mais tenha uma resposta melhor?
fonte
Aqui está um exemplo completo de um script em um dos meus projetos que pode ajudar, eu chamo esse arquivo de "all_source" (marcado como executável) e o coloco no diretório raiz do meu projeto, em seguida, chamo-o como se
grep myfunc $(./all_source)
a classificação no final do script fosse totalmente opcional.Esse script retorna todos os nomes de arquivos no projeto que correspondem
*.h, *.cpp, *.c, *.lua, *.*awk
, mas não pesquisa em todas as pastas nomeadas .svn e gen, além de ignorar as pastas./lib
e./vc6
(mas apenas as que estão diretamente na raiz do projeto). Então, quando você fazgrep myfunc $(./all_source)
isso, apenas recebe esses arquivos. Você precisará chamar isso a partir do diretório raiz do projeto também.fonte
Há também a opção -prune para encontrar:
fonte
Você pode tentar fazer isso:
Por exemplo: se você não deseja pesquisar o conteúdo nos arquivos de log, faça o seguinte:
fonte