Um dos meus comandos BASH favoritos é:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
que pesquisa o conteúdo de todos os arquivos no diretório atual e abaixo do diretório SearchString especificado. Como desenvolvedor, isso às vezes é útil.
No entanto, devido ao meu projeto atual e à estrutura da minha base de código, eu gostaria de tornar esse comando BASH ainda mais avançado, não pesquisando arquivos que estejam dentro ou abaixo de um diretório que contenha ".svn" ou quaisquer arquivos que termine com ".html"
A página MAN para encontrar meio que me confundiu. Eu tentei usar -une, e isso me deu um comportamento estranho. Na tentativa de pular apenas as páginas .html (para iniciar), tentei:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
e não conseguiu o comportamento que eu esperava. Acho que posso estar perdendo o ponto de podar. Vocês poderiam me ajudar?
obrigado
grep -rl 'SearchString'
find
para pesquisar dentro de um arquivo.
-name '*.*'
não encontra todos os arquivos: apenas aqueles com um .
em seu nome (o uso de *.*
geralmente é um DOS-ism, enquanto no Unix, você normalmente usa apenas *
para isso). Para realmente combiná-los todos, basta remover o argumento completamente: find . -exec ...
. Ou se você deseja aplicar apenas grep a arquivos (e pular diretórios), faça find . -type f -exec ...
.
find
não é um comando bash build-in, mas um programa separado