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