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

find . -type d

可用于查找某个起始点下面的所有目录。但它也会返回工作目录(.) ,这可能是不希望看到的。怎么能排除呢?

103595 次浏览

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

find . -mindepth 1 -type d

POSIX 7 solution:

find . ! -path . -type d

对于这个特殊的情况(.), golfs比mindepth解决方案(24 vs 26字符)更好,尽管由于!,这可能更难输入。

为了排除其他目录,这将不太好,并需要一个dry变量:

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

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

  • 脚本?使用!实现可移植性。
  • 交互会话在GNU?
    • 排除.吗?扔硬币。
    • 排除long_name吗?使用-mindepth
    • 李< / ul > < / >

当我不介意忽略第一级dotfiles时,我使用find ./* <...> (* glob在bash中默认不匹配这些文件-请参阅shopt内置:https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html中的'dotglob'选项)。

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上测试]

将其输送到sed。不要忘记扩展正则表达式的-r。

find . -type d | sed -r '/^\.$/d'