zsh: исключая файлы от шаблона

Мне везло с Slackware в действительно старых системах.

18
13.01.2013, 22:45
2 ответа

Необходимо включать каталог в исключение: print -l foo/*~foo/type_A* или print -l foo/*~{foo/type_A*}.

Если Вы хотите, можно заменить каталог подстановочным знаком: print -l foo/*~*/type_A*

10
27.01.2020, 19:45
  • 1
    Спасибо! О втором шаблоне, сделайте Вы возражаете объяснять как шаблон foo/*~*/type_A* работы? Делает второе * расширьтесь до каждой папки в соответствии с рабочим каталогом, или это достаточно умный, чтобы только расшириться до foo? –  Amelio Vazquez-Reina 22.02.2012, 18:26
  • 2
    @roseck, поскольку это кажется действительно быстрым (например, когда Вы работаете print *~**/* в / каталог), я предполагаю, что он сначала разворачивает первый шаблон и затем удаляет все соответствия, которые соответствуют к шаблону исключения. –  jofel 22.02.2012, 18:36
  • 3
    @roseck этапа ~ является чисто текстовым, часть перед ~ расширяется, как это всегда было бы, затем часть после выездных матчей полос. ​@jofel лучший тест был бы print /**/*~*: можно заметить, что это пересекает целое дерево, даже если это заканчивает тем, что ничего не печатало. –  Gilles 'SO- stop being evil' 23.02.2012, 01:43
  • 4
    я думал, что он хотел исключить type_B, но включать type_A. –  systemovich 08.12.2017, 20:08

zsh имеет ^ оператор шарика, когда EXTENDED_GLOB идет. Это походит на идеальное пригодное для Вашей установленной ситуации:

setopt extendedglob
print -rl foo/^type_A*

Это означает, “соответствуют чему-либо, кроме того, что соответствует следующему шаблону”, но его эффект ограничен частью шаблона между наклонными чертами, или между началом шаблона и первой наклонной чертой, или (как в этом случае) между последней наклонной чертой и концом шаблона.

Можно просмотреть zsh опции, в настоящее время включал с:

setopt

И отключите EXTENDED_GLOB с:

unsetopt extendedglob
30
27.01.2020, 19:45

Теги

Похожие вопросы