该命令中的选项“-mindepth”有何作用?

该命令中的选项“-mindepth”有何作用?

我正在使用findbash 命令,并且我试图理解它,因为它是我正在使用的代码的一部分。在代码中,有问题的命令是 -

find -L $RAW_DIR -mindepth 2 -maxdepth 2 -name "*.bam" -o -name "*.sam" | wc -l

我一直试图通过搜索它的组件来理解这个命令。从本质上讲,我认为它试图找到以.bam或结尾的文件的数量.sam。我认为-maxdepth 2意味着在此文件夹及其直接子文件夹中搜索这些文件。

我不明白的是mindepth -2在这种情况下会发生什么。我查了一下mindeep,到处给出的解释是——

不要在低于级别(非负整数)的级别应用任何测试或操作。 '-mindepth 1' 表示处理除命令行参数之外的所有文件。

对我来说这个解释不是很清楚。就像maxdepth -2意味着搜索深度为 2 的子文件夹一样,mindepth -2用简单的语言来说,相应的意思是什么?

另外,如果 mindepth 在方向上与 maxdepth 相反(这具有直观意义),那么我如何理解在确实有文件的文件夹上执行上面的命令.bam会导致输出的事实 0,而省略命令的 mindepth 部分会导致输出1

答案1

深度 0 是命令行参数,1 是其中包含的文件,2 是深度 1 中包含的文件,等等。

-mindepth N告诉只处理深度 >= N 的文件,类似于告诉-maxdepth M只处理深度 <= M 的文件。因此,如果您想要深度为 2 的文件,那么您需要同时使用两者。

您的命令会匹配$RAW_DIR/foo/bam.bam,但不会$RAW_DIR/bar.bam

尝试一下,例如

$ mkdir -p a/b/c/d
$ find ./a -maxdepth 2
./a
./a/b
./a/b/c
$ find ./a -mindepth 2
./a/b/c
./a/b/c/d
$ find ./a -maxdepth 2 -mindepth 2
./a/b/c

maxdepth带有否定参数没有任何意义:

$ find ./a -maxdepth -2
find: Expected a positive decimal integer argument to -maxdepth, but got ‘-2’

答案2

-mindepth 2和参数-maxdepth 2一起将 的范围限制find为 的深度为 2 的目录$RAW_DIR

该命令与shell 命令find相同bash

printf '%s\n' "$RAW_DIR"/*/*.{sam,bam} | wc -l

这将计算的子目录中的.sam和文件的数量。不过,对于没有文件,它仍然会给出 1 的计数,但就像该命令一样,它会将名称中嵌入换行符的文件计数为两个文件。.bam$RAW_DIRfind

对于绝对正确的find命令,将包含嵌入换行符的文件名计为文件:

find . "$RAW_DIR" -type f -mindepth 2 -maxdepth 2 \
    '(' -name '*.bam' -o -name '*.sam' ')' -exec echo x ';' | wc -l

这将为x每个找到的符合条件的文件单独输出一个,并且会对wc -l这些 x-es 进行计数。

相关内容