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

Respostas:


25
find . -type d -not \( -name .svn -prune \)

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'

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*'

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 .......


2

Você poderia usar:

find . -type d -not -wholename '*.svn*' 

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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.