Como encontrar pastas que não começam com o til (“~”)

1

Estou tentando encontrar pastas, exceto aquelas que começam com o til ("~"). Eu tentei o seguinte, mas os resultados são zero. Parece que find está interpretando o til como um caractere curinga.

find . -type d -not -path '*/\~*'
find . -type d -not -path '*/~*'
find . -type d -not -regex '.*/~.*'
find . -type d -not -regex '.*/\~.*'

Minha versão do encontro é find (GNU findutils) 4.6.0 .

    
por user1822391 04.05.2018 / 15:27

3 respostas

3

Para pular as pastas ./path/to/~dir , mas não a ./path/to/~dir/subdir , como outras pessoas já disseram, você pode fazer:

find . ! -name '~*' -type d -print

Se você também não quiser descer para essas pastas (e encontrar pastas adicionais), faça o seguinte:

find . -name '~*' -prune -o -type d -print

Isso indica ao find para remover as ramificações com raiz nos diretórios cujo nome começa com ~ .

Isso deve ser principalmente equivalente funcionalmente ao seu:

find . -type d ! -path '*/~*'

Só que o último não faz poda, por isso ainda procura dentro desses diretórios, mesmo que não imprima nenhum deles, por isso é menos eficiente.

¹ há alguma diferença em que o primeiro * em */~* pode não corresponder aos nomes de arquivo que contêm caracteres inválidos

    
por 04.05.2018 / 15:42
0

Você precisa usar a opção -name para especificar com o que sua expressão está sendo testada. O seguinte funciona para mim:

find . -type d ! -name '~*'
    
por 04.05.2018 / 15:35
0

O teste do nome deve funcionar bem:

find . -type d ! -name '~*'
    
por 04.05.2018 / 15:36

Tags