219
find . -type d

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

4

5 回答 5

244

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

find . -mindepth 1 -type d
于 2012-11-23T07:55:10.850 回答
222

POSIX 7 解决方案

find . ! -path . -type d

对于这种特殊情况 ( .),打高尔夫球比mindepth解决方案更好(24 对 26 字符),尽管由于!.

要排除其他目录,这将不太好打,并且需要一个 DRYness 变量:

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

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

  • 脚本?用于!便携性。
  • 关于 GNU 的交互式会话?
    • 排除.?扔硬币。
    • 排除long_name?使用-mindepth.
于 2013-06-30T10:32:03.380 回答
24

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/默认
于 2015-03-02T12:21:03.750 回答
3

好吧,还有一个简单的解决方法(该解决方案在 windows git bash 上对我不起作用)

find * -type d

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

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

于 2018-05-19T08:21:26.547 回答
0

用管道传送到 sed。不要忘记扩展正则表达式的 -r。

find . -type d | sed -r '/^\.$/d'
于 2022-02-24T09:20:08.343 回答