我正在使用bash的find命令,并且我试图理解它,因为它是我正在使用的代码的一部分。在代码中,有关命令是-
find -L $RAW_DIR -mindepth 2 -maxdepth 2 -name "*.bam" -o -name "*.sam" | wc -l
我一直试图通过搜索它的组件来理解这个命令。因此,我认为它是试图找到以.bam或.sam结尾的文件数量。我认为-maxdepth 2意味着在这个文件夹及其直接子文件夹中搜索这些文件。
我不明白的是mindepth -2在这种情况下做了什么。我查了一遍,到处都是-
“不要在低于级别(非负整数)的级别上应用任何测试或操作。‘-min深度1’是指处理除命令行参数以外的所有文件。”
对我来说,这个解释不是很清楚。就像maxdepth -2意味着搜索深度为2的子文件夹一样,在简单的语言中,mindepth -2相应地意味着什么?
另外,如果min埋深在方向上正好相反(这是直观的),那么我如何理解这样一个事实:在具有.bam文件的文件夹上执行上面的命令会导致输出0,而忽略命令的最小深度部分会导致输出1?
发布于 2018-07-08 22:28:07
深度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’发布于 2018-07-09 06:58:12
-mindepth 2和-maxdepth 2参数一起将find的范围限制在$RAW_DIR的深度2处。
find命令与bash shell命令相同
printf '%s\n' "$RAW_DIR"/*/*.{sam,bam} | wc -l这将计算.sam子目录中$RAW_DIR和.bam文件的数量。但是,对于没有文件的文件,它仍然会给出1的计数,但是就像find命令一样,它会将一个带有嵌入换行符的文件计数为两个文件。
对于绝对正确的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。
https://unix.stackexchange.com/questions/454197
复制相似问题