find . -type d
可用于查找某些起点下方的所有目录。但它也会返回当前目录(.
),这可能是不受欢迎的。如何排除?
答案 0 :(得分:166)
find
参数不仅可以控制-maxdepth
的递归深度,还可以使用相应的-mindepth
参数将深度限制为“top”。所以真正需要的是:
find . -mindepth 1 -type d
答案 1 :(得分:155)
find . ! -path . -type d
对于这个特殊情况(.
),高尔夫球比mindepth
解决方案更好(24对26个字符),尽管由于!
,这可能稍微难以打字。 / p>
要排除其他目录,这将打得不那么好,并且需要一个变量用于DRYness:
D="long_name"
find "$D" ! -path "$D" -type d
我在!
和-mindepth
之间的决策树:
!
进行移植。.
?扔硬币。long_name
?使用-mindepth
。答案 2 :(得分:18)
当我不介意忽略第一级点文件时我使用find ./* <...>
(默认情况下,*
glob在bash中不匹配 - 请参阅&#39; dotglob&内置商店中的#39;选项: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
答案 3 :(得分:0)
嗯,一个简单的解决方法(解决方案在Windows git bash上不适用于我)
find * -type d
它可能不是很高效,但完成工作,这有时是我们需要的。
[编辑]:正如@AlexanderMills所评论的那样,它不会在根位置显示隐藏目录(例如./.hidden
),但它会显示隐藏的子目录(例如./folder/.hiddenSub
)。 [在Windows上使用git bash测试]