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

Mat*_*nge 172 directory shell find

find . -type d
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*nge 181

不仅find可以通过-maxdepth参数控制递归深度,也可以使用相应的-mindepth参数将深度限制为"顶部" .所以真正需要的是:

find . -mindepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.即:`找到.-mindepth 1 -maxdepth 1-type d ...` (6认同)
  • 适用于GNU find,但遗憾的是它是[POSIX 7 find](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html#tag_20_47)的gnu扩展,甚至LSB也使用POSIX shell实用程序(不是GNU扩展的) (3认同)

Cir*_*四事件 171

POSIX 7解决方案:

find . ! -path . -type d
Run Code Online (Sandbox Code Playgroud)

对于这个特殊情况(.),高尔夫球比mindepth解决方案更好(24对26个字符),虽然这可能稍微难以打字因为!.

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

D="long_name"
find "$D" ! -path "$D" -type d
Run Code Online (Sandbox Code Playgroud)

!和之间的决策树-mindepth:

  • 脚本?使用!了便携性.
  • GNU的互动环节?
    • 排除.?扔一枚硬币.
    • 排除long_name?使用-mindepth.

  • @VincentDeSmet 你想只排除那些路径,还是实际上不递归到它们中?如果只是路径,您可以使用`find / ! -regex '/\(a\|b\)/.*'` 或更简单地说,通过 grep 管道。为了不递归,上面的方法效率很低,你应该使用`-prune`:http://stackoverflow.com/questions/1489277/how-to-use-prune-option-of-find-in-sh (2认同)

Mil*_*vic 18

find ./* <...>当我不介意忽略第一级dotfiles时我会使用(*在bash中默认情况下glob不匹配 - 请参阅内置shopt中的'dotglob'选项: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

  • 注意:“忽略第一级点文件”也意味着排除所有隐藏文件/目录。 (2认同)

Sta*_*ola 7

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

find * -type d

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

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