localizar diretório de exclusão


13

Estou no Linux (Ubuntu) e gostaria de excluir determinados diretórios (como .hg) quando estiver executando um

find | less  

Tentei o seguinte para excluir o diretório .hg da lista, mas parece não funcionar.

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

Como excluir .directoryem um comando find

Respostas:


14

Na pesquisa de uma findsolução semelhante , descobri a explicação útil sobre como usar a opção '-une' de 'find' no sh? de Laurence Gonsalves .

Você pode 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 (escapados) \(e \)agrupam os testes ( typee name) e as ações correspondentes ( prunee print, respectivamente) juntos à esquerda e à direita do OR ( -o).

Como -otem precedência menor que a justaposição, você pode omitir os parênteses, se quiser. Muitas findimplementações também permitem que você pule a final -print.

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

1
Eu estava prestes a escrever minha solução, mas parece ser exatamente isso. Pessoalmente, eu colocaria o -pruneinterior do primeiro conjunto de colchetes e o -type f -printdo segundo conjunto, apenas para tornar as operações e / ou mais óbvias, mas, de outra forma, isso me parece ótimo.
me_

Melhorei os parênteses (e o raciocínio deles) graças ao comentário de @me_and.
fheub

2

Dê uma olhada em ack: http://betterthangrep.com/

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 -fopção, como em:

ack -f --ignore-dir=.directory

Eu mudei de escrever comandos de pesquisa / pesquisa complicados para simples.

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


Com base na find | lesspergunta, o OP está procurando uma lista simples de arquivos. Como isso ajuda nisso?
um CVn

@ MichaelKjörling Como afirmei na minha resposta, a opção -f fornece uma lista de arquivos.
Brian Leathem

-2

podes tentar

find \( ! -regex '.*/\.directory\(\|/.*\)' \)

Com certeza, isso não é nada parecido com o que o OP pediu.
me_and

Eu apenas pensei que isso é o que ele quis dizer com.directory
yuyichao
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.