列出文件名中任何位置不包含模式的文件(仅限 zsh)

list files that do not contain pattern anywhere in filename (zsh only)

假设我在目录中有一个文件列表,如下所示:

blackneasy-sq.png
dima-sq.png
envoy-sq.png
fox-sq.png
freeze-sq.png
ministarstvo kulture-sq.png
naxi-sq.png
pick-sq.png
pink-sq.png
wink-sq.png
brick-sq.png
rider-sq.png
sixt-rent-a-car.png
slavija hotel-sq.png
temet-sq.png
tepe-sq.png

我如何指定排除模式以显示所有文件,除了那些 在文件名的任何地方包含 ck 个粘在一起的字符?

因此在结果列表中,文件:

blackneasy-sq.png
pick-sq.png
brick-sq.png

不应显示。

我试过了没有成功。

print -l [[:alpha:]]*^ck*.*

使用~运算符:<em>THIS</em>~<em>THAT</em>匹配的文件匹配模式 <em>THIS</em> 但不匹配 <em>THAT</em>。这需要 extended_glob 选项(在某些上下文中自动打开,例如完成功能,但不是默认状态)。

print -l -- *.png~*ck*

您可以将 *~<em>THAT</em> 缩写为 ^<em>THAT</em>(也需要extended_glob),所以如果你不想限制为.png个文件,你可以使用

print -l -- ^*ck*