无需递归查找


246

是否可以find某种方式使用该命令,而该命令不会递归到子目录中?例如,

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

而类似的结果find DirsRoot --donotrecuourse -type f只会是File1, File2

Answers:


380

我想您会-maxdepth 1根据当前的命令结构获得所需的选项。如果没有,你可以尝试寻找在手册页find

相关条目(为方便起见):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

您的选择基本上是:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

要么:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

对于OP的示例,我认为这应该是-maxdepth 1
Paul R

@Paul R:实际上,这取决于他要如何处理隐藏文件,但是尽管如此,我还是修改了答案。对于他的例子1可能就是他想要的。
eldarerathis 2010年

1
对我来说,-maxdepth 0没有显示任何文件,但-maxdepth 1按预期工作,同时显示隐藏文件。
Bruce Wayne'3

1
@BruceWayne注意*find DirsRoot/* -maxdepth 0 -type f。如果不进行说明,它将不会显示任何文件。
mapeters '16

@mook,谢谢,但我不记得遇到此问题的原始背景,哈哈。
Bruce Wayne

33

相信您正在寻找-maxdepth 1


1
对于OP的示例,我认为这应该是-maxdepth 1
Paul R

是的,如果他使用的命令与示例中的命令完全相同,则为1.我的错误。
华夫悖论

17

如果您寻找符合POSIX的解决方案:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepth不是POSIX兼容选项。


感谢您的解决方案,但这不能简化为find DirsRoot/* -type f -prune吗?
dokaspar'5

@dokaspar真是个好问题!(您忘了在-prunebtw 之前插入“ -o” )答案是否定的,不能。要完全理解为什么不能简化它,只需在发出set -x之前发出命令find DirsRoot/* -type f -o -prune,您便会立即看到它。根本原因是外壳扩展DirsRoot/*表达式的局限性。
sqr163 '17

在centos上不起作用,仍在输出上进行完全递归!正确的命令是find . -name . -o -prune
Reishin

无论如何,在Solaris上,将DirsRoot保留为所需路径,则不需要cd;相反,您可以:找到DirsRoot /。类型的f -print -o -name。-o -prune
spioter
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.