Jak poprawnie negować wyrażenia globbing Zsh?

18

Chcę wyświetlić listę wszystkich plików oprócz tych kończących się na owp: Dlatego próbowałem:

  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

żaden nie działał. Jak mam to zrobić we właściwy sposób? Mój .zshrc „ustawił rozszerzonąglob”.

matematyka
źródło

Odpowiedzi:

27

Spróbuj albo:

ls -l ^*.owp

(tzn. dopasuj cokolwiek oprócz wzorca *.owp)

lub:

ls -l *~*.owp

(tzn. dopasuj wszystko, co pasuje do wzorca, *ale nie pasuje *.owp)

Zobacz man zshexpn=> FILENAME GENERATION=>, Glob Operatorsaby uzyskać więcej informacji na ten temat.


Wzorce ()globu są dołączane do kwalifikatorów glob, podczas gdy chcesz operatora glob.

Co *.(^owp)to jest:

  1. Dopasuj wszystkie nazwy plików kończące się kropką
  2. jeśli nie są rurami (^p), i
  3. sortuj dopasowania (o)według „ w” => „nieznany specyfikator sortowania”

Zobacz man zshexpn=> FILENAME GENERATION=>, Glob Qualifiersaby uzyskać więcej informacji na ten temat.

peth
źródło
1
^ *. owp wykonał robotę. whooa, za co *. (^ owp) naprawdę robi :)
matematyka
9
Dla każdego, kto nie może tego zrobić, musisz ustawić tę extendedglobopcję w Zsh.
DBedrenko
7
@DBedrenko: dzięki! NB: sporządzono przezsetopt extendedglob
Thomas M
1
Uznałem to za przydatne jako szybkie podsumowanie dla wszystkich zainteresowanych kwalifikacjami glob.
wardw