find . -type d
可用于查找某个起点以下的所有目录。但它也会返回当前目录 ( .
),这可能是不受欢迎的。怎么可能排除?
不仅find
可以通过-maxdepth
参数控制递归深度,还可以使用相应的参数从“top”开始限制深度-mindepth
。所以真正需要的是:
find . -mindepth 1 -type d
find . ! -path . -type d
对于这种特殊情况 ( .
),打高尔夫球比mindepth
解决方案更好(24 对 26 字符),尽管由于!
.
要排除其他目录,这将不太好打,并且需要一个 DRYness 变量:
D="long_name"
find "$D" ! -path "$D" -type d
!
我在和之间的决策树-mindepth
:
!
便携性。.
?扔硬币。long_name
?使用-mindepth
.find ./* <...>
当我不介意忽略第一级点文件时,我会使用(*
默认情况下,glob 在 bash 中与这些不匹配 - 请参阅内置 shopt 中的“dotglob”选项:https ://www.gnu.org/software/bash /manual/html_node/The-Shopt-Builtin.html)。
eclipse tmp # 查找 . . 。/屏幕 ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/默认
eclipse tmp # 查找 ./* 。/屏幕 ./screen/.testfile2 ./tmux-0 ./tmux-0/默认
好吧,还有一个简单的解决方法(该解决方案在 windows git bash 上对我不起作用)
find * -type d
它的性能可能不是很好,但可以完成工作,这有时是我们需要的。
[编辑]:正如@AlexanderMills 评论的那样,它不会在根位置显示隐藏目录(例如./.hidden
),但会显示隐藏的子目录(例如。./folder/.hiddenSub
)。[在 Windows 上使用 git bash 测试]
用管道传送到 sed。不要忘记扩展正则表达式的 -r。
find . -type d | sed -r '/^\.$/d'