私はfind
bashコマンドを使用していますが、私が使用しているコードの一部であるため、理解しようとしています。コード内の問題のコマンドは次のとおりです。
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_DIR
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が計算されます。