find excluir diretório

13

Estou no Linux (Ubuntu) e gostaria de excluir certos diretórios (como .hg) quando estou fazendo um

find | less  

Eu tentei o seguinte para excluir o diretório .hg da listagem, mas parece não funcionar.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Como excluo .directory em um comando de localização

    
por Senthil Kumaran 09.02.2012 / 08:40

3 respostas

13

Na pesquisa por um find semelhante solução Descobri a explicação útil em Como usar a opção '-prune' de 'find' em sh? por < href="https://stackoverflow.com/users/90848/laurence-gonsalves"> Laurence Gonsalves .

Você poderia usar algo como:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

ou (sem o nome)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

Os parênteses (com escape) \( e \) agrupam os testes ( type e name ) e as ações correspondentes ( prune e print , respectivamente) juntos à esquerda e à direita da OR ( -o ).

Como -o tem precedência menor que a justaposição, você pode omitir os parênteses, se desejar. Muitas implementações de find também permitem ignorar o% final -print .

find . -type d -name .hg -prune -o -type f -name "foo" -print
    
por 09.02.2012 / 12:02
2

Dê uma olhada no ack : link

Além de ter um conjunto razoável de pastas excluídas padrão (.hg é uma exclusão padrão, por exemplo), é fácil excluir novas pastas:

ack --ignore-dir=.directory search_term

Para trazer isso de volta ao seu caso de uso em que você está procurando uma lista de arquivos, use a opção -f , como em:

ack -f --ignore-dir=.directory

Eu mudei de escrever comandos de busca / localização complicados para comandos ack simples.

Dica: coloque as opções de linha de comando comumente usadas (pastas excluídas, por exemplo) em um arquivo .ackrc.

    
por 20.02.2012 / 23:35
-2

você pode tentar

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
    
por 09.02.2012 / 12:49

Tags