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

Senthil Kumaran
fonte

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

Brian Leathem
fonte
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\(\|/.*\)' \)
yuyichao
fonte
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