2016-03-02 4 views
0

Я хочу перечислить все файлы .c, за исключением файлов .mod.c. Я использую zsh 5.2 (x86_64-debian-linux-gnu) с oh-my-zsh. Шаблон я использую следующее:Не найдено совпадений для правильного globbing

$ ls *.c  
ipmi_bt_sm.c ipmi_devintf.mod.c  ipmi_msghandler.c 
ipmi_powernv.c ipmi_poweroff.mod.c ipmi_si.mod.c 
ipmi_ssif.c  ipmi_watchdog.mod.c ipmi_devintf.c 
ipmi_kcs_sm.c ipmi_msghandler.mod.c ipmi_poweroff.c 
ipmi_si_intf.c ipmi_smic_sm.c   ipmi_watchdog.c 
$ ls *.c~mod.c 
zsh: no matches found: *.c~mod.c 
$ ls .*.c~aoesuthaoestuhsththsh 
zsh: no matches found: .*.c~aoesuthaoestuhsththsh 

Я уверен, что «* .c ~ mod.c» является правильным, потому что это именно то, что предлагается на следующем веб-сайте.

http://www.strcat.de/zsh/:

Ls * .c ~ lex.c соответствует всем .c файлов, за исключением lex.c

Должен ли я включить что-то конкретное для расширенной подстановки? Или отключить что-то, что мешает этой функции?

ответ

1

Во-первых, вам необходимо убедиться, что расширенный подстановка включен: setopt extended_glob

(Вы, вероятно, хотите, чтобы в .zshrc)

Что касается вашего шаблона, что вы хотите *.c~*.mod.c.

Способ работы: pattern1~pattern2, и он дает все матчи pattern1, минус все матчи pattern2. У вас было «Все, что заканчивается на .c, минус mod.c». То, что вы хотите, действительно «eveything, которое заканчивается на .c, минус все, что заканчивается на .mod.c», что я даю выше.