このコマンドの「-minlength」オプションは何をしますか?

このコマンドの「-minlength」オプションは何をしますか?

私はfindbashコマンドを使用していますが、私が使用しているコードの一部であるため、理解しようとしています。コード内の問題のコマンドは次のとおりです。

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

私はこのコマンドのコンポーネントを検索してこのコマンドを理解しようとしました。本質的に.bamまたはで終わるファイルの数を探しているようです.sam。私は、-maxdepth 2このフォルダとそのサブフォルダからこれらのファイルを検索することを意味すると思います。

私が理解していないのは、mindepth -2この場合何が起こるのでしょうか。マインドディップを確認してみると、あちこちに説明が出ていますね——

レベル(負以外の整数)より低いレベルでは、テストや操作を適用しないでください。 「-minlength 1」は、コマンドラインパラメータを除くすべてのファイルを処理することを意味します。

説明は私には明確ではありません。maxdepth -2深さ2のサブフォルダ検索を意味するように、単純なmindepth -2言語では何を意味しますか?

.bamまた、最小深度が最大深度とは反対方向である場合(直感的に理解されている)、ファイルがあるフォルダで上記のコマンドを実行すると出力が発生することをどのように理解できますか?0, コマンドの minlength 部分を省略すると出力が発生します。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引数とともに深さ2のディレクトリに-maxdepth 2範囲を制限します。find$RAW_DIR

このコマンドはシェルコマンドとfind同じです。bash

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

サブディレクトリの合計.samとファイル数を計算します。ただし、ファイルがない場合はまだ1つの数を提供しますが、コマンドと同様に、名前に改行文字を含むファイルを2つのファイルとして数えます。.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 -lx-esが計算されます。

関連情報