이 명령의 "-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개의 개수를 제공하지만 명령과 마찬가지로 이름에 개행 문자가 포함된 파일을 두 개의 파일로 계산합니다..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가 계산됩니다.

관련 정보