路径中间的 zsh glob 限定符

Pow*_*ool 6 zsh

假设我有以下目录结构:

$ mkdir -p a/1
$ ln -s a b
Run Code Online (Sandbox Code Playgroud)

搜索目录,我也得到了符号链接中的目录:

$ print -l */*(/)
a/1
b/1
Run Code Online (Sandbox Code Playgroud)

如何将第一个目录级别的通配限制为仅目录,不包括符号链接?显而易见的不起作用:

$ print -l *(/)/*(/)
zsh: bad pattern: *(/)/*(/)
Run Code Online (Sandbox Code Playgroud)

更一般地说,如何为中间路径组件指定 glob 限定符?在精神上:

$ print -l a(...)/b(...)/c(...)/d(...)/e(...)/f(...)
Run Code Online (Sandbox Code Playgroud)

其中(...)表示各个路径组件的全局限定符。

gva*_*kov 0

文档建议glob 限定符只能在模式末尾使用:

用于文件名生成的模式可能以括号内的限定符列表结尾。限定符指定将在参数列表中插入哪些与给定模式匹配的文件名。

虽然不如 glob 方便,但您想要实现的目标可以通过以下方式完成find

find -H . ! -path . -type d -links 2 | xargs
./a/1 
Run Code Online (Sandbox Code Playgroud)