如何从查找“ type d”中排除此/当前/点文件夹


Answers:


193

POSIX 7解决方案

find . ! -path . -type d

对于这种特殊情况(.),打高尔夫球比mindepth解决方案要好(24个字符对26个字符),尽管由于的原因,打高尔夫球可能有点困难!

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

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

!与之间的决策树-mindepth

  • 脚本?使用!了便携性。
  • 关于GNU的互动会议?
    • 排除.?扔硬币。
    • 排除long_name?使用-mindepth

如果您需要排除多个路径,这find /path/ ! -path "/path/first" ! -path "/path/second"是唯一的方法吗?
文森特·德·斯梅特

2
@VincentDeSmet您是否要仅排除那些路径,或者实际上不递归到这些路径?如果只是路径,则可以使用find / ! -regex '/\(a\|b\)/.*'或更简单的方法来遍历grep。为了不递归,上面是非常低效的,你应该使用-prunestackoverflow.com/questions/1489277/...
西罗桑蒂利郝海东冠状病六四事件法轮功

我的问题如下:我想递归删除目录中除1个子目录外的所有内容。我当时使用findwith grep来排除目录,但是父目录仍然存在,从而导致所有内容都被删除。
文森特·德·斯梅特

@VincentDeSmet我看不到直接解决方案find,您需要检查前缀:stackoverflow.com/questions/17959317/…但是Bash for loop可以处理它:-)
Ciro Santilli郝海东冠状病六四事件法轮功

为了\!安全起见,您可能希望避免使用感叹号()。我机器上的所有示例man find均已退出,因此好像是一个好主意。编辑-刚刚注意到它甚至明确说过:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
AdrianGünter15年

199

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

find . -mindepth 1 -type d

5
可以在GNU find上运行,但不幸的是它是POSIX 7 find的gnu扩展,甚至LSB也使用POSIX shell实用程序(不是GNU扩展的实用程序)
Ciro Santilli郝海东冠状病六四事件法轮功

6
这对我有用。即:find . -mindepth 1 -maxdepth 1 -type d ...
racl101 '16

19

find ./* <...>在不介意忽略一级点文件时使用(*默认情况下,blob中的glob与这些glob不匹配-请在内置的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/默认

仅供参考。不要将此-exec选项与选项一起使用。例如,如果尝试find dir/* -type d -exec rmdir {} \;,则会看到错误。
plhn

您误会了,或者被误导了。该命令将正常工作。如果您看到错误,则它们将来自错误目录,rmdir并且很可能告诉您目录不为空,因为find它将对目录进行深度优先搜索,在其子目录之前显示父目录。
米洛斯·伊万诺维奇

2
注意:“忽略一级点文件”也意味着排除所有隐藏的文件/目录。
乔纳森·H

2

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

find * -type d

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

[编辑]:正如@AlexanderMills所说,它不会在根目录中显示隐藏目录(例如./.hidden),但是会显示隐藏子目录(例如./folder/.hiddenSub)。[在Windows上使用git bash测试]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.