find . -type d
可用于查找某个起始点下面的所有目录。但它也会返回工作目录(.) ,这可能是不希望看到的。怎么能排除呢?
.
不仅find的递归深度可以通过-maxdepth参数控制,还可以使用相应的-mindepth参数从“顶部”限制深度。所以我们真正需要的是:
find
-maxdepth
-mindepth
find . -mindepth 1 -type d
POSIX 7 solution:
find . ! -path . -type d
对于这个特殊的情况(.), golfs比mindepth解决方案(24 vs 26字符)更好,尽管由于!,这可能更难输入。
mindepth
!
为了排除其他目录,这将不太好,并需要一个dry变量:
D="long_name" find "$D" ! -path "$D" -type d
我的决策树在!和-mindepth之间:
long_name
当我不介意忽略第一级dotfiles时,我使用find ./* <...> (* glob在bash中默认不匹配这些文件-请参阅shopt内置:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html中的'dotglob'选项)。
find ./* <...>
*
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)
find * -type d
它的性能可能不是很好,但可以完成工作,这是我们有时需要的。
[编辑]:正如@AlexanderMills评论的那样,它不会显示根位置的隐藏目录(例如./.hidden),但它会显示隐藏的子目录(例如./.hidden)。./folder/.hiddenSub)。[git bash在windows上测试]
./.hidden
./folder/.hiddenSub
将其输送到sed。不要忘记扩展正则表达式的-r。
find . -type d | sed -r '/^\.$/d'