как правильно отрицать zsh globbing выражений?

17

Я хочу перечислить все файлы, кроме тех, которые заканчиваются на owp: Поэтому я попытался:

  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

никто не работал. Как мне это правильно сделать? У моего .zshrc есть "set extendedglob".

математический
источник

Ответы:

26

Попробуйте либо:

ls -l ^*.owp

(то есть сопоставить что угодно, кроме шаблона *.owp)

или же:

ls -l *~*.owp

(то есть соответствует чему-либо, что соответствует шаблону, *но не соответствует *.owp)

Смотрите man zshexpn=> FILENAME GENERATION=> Glob Operatorsдля более подробной информации.


К шаблонам ()glob добавляются шаблоны glob, тогда как вам нужен оператор glob.

Что *.(^owp)это такое:

  1. Совпадение всех имен файлов, заканчивающихся точкой
  2. если они не трубы (^p), и
  3. сортировать совпадения (o)по " w" => "неизвестному спецификатору сортировки"

Смотрите man zshexpn=> FILENAME GENERATION=> Glob Qualifiersдля более подробной информации.

Peth
источник
1
^ *. Оуп сделал работу. воу, для чего *. (^ owp) действительно делает :)
математика
7
Для тех, кто не может заставить это работать, вам нужно установить extendedglobопцию в Zsh.
Д.Бедренко
6
@DBedrenko: спасибо! NB: сделано черезsetopt extendedglob
Томас М
1
Я нашел это полезным в качестве краткого резюме для всех, кто интересуется глобальными классификаторами.
wardw