Como localizo (ou excluo) todos os diretórios e subdiretórios que correspondem a um determinado padrão (no Linux)?

17

Estou tentando usar o comando find do Linux para encontrar todos os diretórios e subdiretórios que não possuem .svn (pastas ocultas do Subversion) em seu caminho. Só consigo excluir os diretórios .svn reais, mas não nenhum dos subdiretórios.

Aqui está o que estou fazendo agora:

find . -type d \! -iname '*.svn*'

Eu também tentei:

find . -type d \! iname '.svn' \! iname '.svn/*'

Apenas um FYI, estou tentando usar o padrão de localização para poder aplicar algumas propriedades do subversion a todos os diretórios do meu repositório, excluindo as pastas ocultas do subversion e seus subdiretórios (aplicando o comando exec aos diretórios retornados pelo comando find ) ..

TIA

Jason Down
fonte

Respostas:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
fonte
Eu vou com este, embora todos parecessem funcionar.
21139 Jason Down
Eu usei -une em encontrar antes, mas eu não tinha visto esse truque (...). Obrigado.
Rory
Você pode dizer como isso funcionaria em um aplicativo node.js./express em que desejo excluir os módulos do nó da contagem das linhas? Eu tentei find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l , sem sucesso ...
retalhamento
Em resposta ao @shredding sobre aplicativos Node.js / Express e excluindo diretórios node_modules dos resultados da pesquisa, isso funciona para mim: find. -name ' .test.js' -não (-wholename '* node_modules ') ... uma vez que os testes eu quero correr são sufixo ".test.js"
mysterlune
Isso funcionaria sem o -type d? Gosto de procurar todos os arquivos, mas exclui a dir ".git" recursivamente
James Mitch
6

Que tal simplesmente

find . -type d |  grep -v '.svn'
wazoox
fonte
Perde sua capacidade de usar qualquer uma das ações de localização.
David Pashley
Sim, mas que tal um pequeno loop sh agradável? :) para FILE in find . -type d | grep -v '.svn'; ecoam o que quer que seja; done
wazoox
6

E a -pathopção de encontrar?

find . -type d ! -path '*.svn*'
Rory
fonte
1
Perdeu uma cotação de fechamento. Há uma chance externa de que os curingas sejam muito gananciosos.
22630 Dan Carley
2

encontrar . -caminho './tmp' -prune -o .......


fonte
2

Você poderia usar:

find . -type d -not -wholename '*.svn*' 
idbrii
fonte
ele retirou o * da frente da resposta ... deve ser encontrado. -type d -não -wholename ' /.svn/ ' (que de wholename squote barra asterisco dot svn squote barra asterisco)