我在 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)