como nego corretamente expressões zobb globbing?

18

Quero listar todos os arquivos, exceto os que terminam com owp: Por isso, tentei:

  ls -l *.(^owp)
  zsh: unknown sort specifier
  ls -l *(^owp) 
  zsh: unknown sort specifier
  ls -l *[^o][^w][^p] # does not work either, missing some files

nenhum funcionou. Como faço isso de maneira correta? Meu .zshrc "definiu extendedglob".

matemática
fonte

Respostas:

27

Tente:

ls -l ^*.owp

(ou seja, corresponde a qualquer coisa, exceto o padrão *.owp)

ou:

ls -l *~*.owp

(ou seja, corresponde a qualquer coisa que corresponda ao padrão, *mas não corresponde *.owp)

Veja man zshexpn=> FILENAME GENERATION=> Glob Operatorspara mais informações.


Os ()padrões glob anexados são para qualificadores glob, enquanto você deseja um operador glob.

O que *.(^owp)faz é:

  1. Corresponder todos os nomes de arquivos que terminam com um ponto
  2. se não são tubos (^p), e
  3. classifique as correspondências (o)por " w" => "especificador de classificação desconhecido"

Veja man zshexpn=> FILENAME GENERATION=> Glob Qualifierspara mais informações.

peth
fonte
1
^ *. owp fez o trabalho. Whooa, para o que * (^ owp) realmente faz :).
matemática
9
Para quem não consegue fazer isso funcionar, é necessário definir a extendedglobopção no Zsh.
DBedrenko
7
@DBedrenko: obrigado! Nota: feito viasetopt extendedglob
Thomas M
1
Achei isso útil como um resumo rápido para qualquer pessoa interessada em qualificadores da glob.
wardw 19/01