Isso deve funcionar:
find -path '*/test/*' -prune -o -name '*.java' -exec grep blah {} \;
Tentar excluir um conjunto de diretórios de um achado está me enlouquecendo! O que eu quero fazer é procurar por todos os arquivos .java em uma árvore de diretórios, mas ignorar todos os diretórios de teste. Então, eu tentei:
find . -name "*.java" -not -path "test"
e
find . -name "*.java" -path "test" -prune
e várias variações dos mesmos. No entanto - dependendo da variação - ou eu obtenho todos os arquivos java (incluindo aqueles nos diretórios de teste), ou nenhum deles. Eu olhei para outras questões aqui no SU (por exemplo, este aqui e este ), mas ou eles don ' t resolver minha situação, ou estou perdendo alguma coisa.
Estou usando o gnu find 4.2.27 (fwiw, no centos 5.5 w / gnu bash 3.2.25).
Edit: Desculpe, eu deveria ter especificado originalmente que eu preciso fazer um
-exec grep blah {} \;
então, percorrer o grep -v não funcionará para mim nessa situação.
Consolidando as dicas mencionadas acima, isso procura arquivos PHP de forma recursiva, mas exclui vários diretórios e, em seguida, os compacta.
find -name locallibs -prune -o -name libs -prune -o -name wiki -prune -o -name tmp -prune -o -name '*.php' -exec zip all.zip {} \;