find . -type d

可用于查找某个起始点以下的所有目录。但是它也返回当前目录(.),这可能是不希望的。怎么能排除呢?


find的递归深度不仅可以通过-maxdepth参数控制,还可以使用相应的-mindepth参数从“顶部”限制深度。所以我们真正需要的是:

find . -mindepth 1 -type d

POSIX 7解决方案:

find . ! -path . -type d

对于这个特殊的情况(.),golfs比mindepth解决方案(24 vs 26字符)更好,尽管这可能因为!而稍微更难输入。

为了排除其他目录,这将不太好,并需要一个dry变量:

D="long_name"
find "$D" ! -path "$D" -type d

我的决策树之间!和-mindepth:

脚本?使用!可移植性。 GNU的交互式会话? 排除。扔硬币。 排除long_name吗?使用-mindepth。


我使用find ./* <…>当我不介意忽略第一级dotfiles (* glob在bash中默认不匹配这些-请参阅shopt内置的'dotglob'选项:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html)。

eclipse tmp # find .
.
./screen
./screen/.testfile2
./.X11-unix
./.ICE-unix
./tmux-0
./tmux-0/default
eclipse tmp # find ./*
./screen
./screen/.testfile2
./tmux-0
./tmux-0/default

好吧,一个简单的工作以及(解决方案是不为我的windows git bash)

查找*类型d

它的性能可能不是很好,但可以完成工作,这是我们有时需要的。

[编辑]:正如@AlexanderMills评论的那样,它不会显示根位置的隐藏目录(例如/.hidden),但它会显示隐藏的子目录(例如./folder/. hiddensub)。[git bash在windows上测试]


将其输送到sed。不要忘记扩展正则表达式的-r。

find . -type d | sed -r '/^\.$/d'