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