как правильно отрицать 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для более подробной информации.


1
^ *. Оуп сделал работу. воу, для чего *. (^ owp) действительно делает :)
математика

7
Для тех, кто не может заставить это работать, вам нужно установить extendedglobопцию в Zsh.
Д.Бедренко

6
@DBedrenko: спасибо! NB: сделано черезsetopt extendedglob
Томас М

1
Я нашел это полезным в качестве краткого резюме для всех, кто интересуется глобальными классификаторами.
wardw
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.