如何从查找“类型d”中排除此/ current / dot文件夹

时间:2012-11-23 07:55:11

标签: shell directory find

find . -type d

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

4 个答案:

答案 0 :(得分:166)

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

find . -mindepth 1 -type d

答案 1 :(得分:155)

POSIX 7 solution

find . ! -path . -type d

对于这个特殊情况(.),高尔夫球比mindepth解决方案更好(24对26个字符),尽管由于!,这可能稍微难以打字。 / p>

要排除其他目录,这将打得不那么好,并且需要一个变量用于DRYness:

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

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

  • 脚本?使用!进行移植。
  • GNU的互动环节?
    • 排除.?扔硬币。
    • 排除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测试]