相关疑难解决方法(0)

在 zsh 递归 glob 中排除目录名称

我在 Linux 下运行 zsh setopt extended_glob ksh_glob glob_dots。我正在寻找易于在命令行上输入的东西,没有可移植性要求。我正在查看一个源代码树,没有“奇怪”的文件名(例如\,文件名中没有,没有以 开头的文件名-)。

以下任一命令递归打印当前目录的子目录列表:

find -type d
print -l **/*/
Run Code Online (Sandbox Code Playgroud)

这实际上是一个 svn 结帐:

$ find -type d
./.deps
./.svn
./.svn/text-base
./.svn/prop-base
./.svn/tmp
./.svn/tmp/text-base
./.svn/tmp/prop-base
./.svn/tmp/props
./.svn/props
./lib/.svn
./lib/.svn/text-base
./lib/.svn/prop-base
./lib/.svn/tmp
./lib/.svn/tmp/text-base
./lib/.svn/tmp/prop-base
./lib/.svn/tmp/props
./src/.svn
./src/.svn/text-base
./src/.svn/prop-base
./src/.svn/tmp
./src/.svn/tmp/text-base
./src/.svn/tmp/prop-base
./src/.svn/tmp/props
Run Code Online (Sandbox Code Playgroud)

我想排除.svn每个目录中存在的目录及其子目录。这很容易find

find -type d -name .svn -prune -o -print
Run Code Online (Sandbox Code Playgroud)

我可以用一个短的 zsh glob 来做到这一点吗?忽略点文件很接近(我需要明确地这样做,因为我已经glob_dots设置了):

print -l **/*(/^D)
Run Code Online (Sandbox Code Playgroud)

但这并不令人满意,因为它隐藏了.deps我确实想看到的目录。我可以过滤掉包含.svn以下内容的路径:

print -l …
Run Code Online (Sandbox Code Playgroud)

zsh recursive wildcards

8
推荐指数
1
解决办法
5536
查看次数

标签 统计

recursive ×1

wildcards ×1

zsh ×1