find 명령이 파일 이름 범위에서 작동하지 않는 것 같습니다.

find 명령이 파일 이름 범위에서 작동하지 않는 것 같습니다.
> ls
    chr10_canu.fasta  chr11.fasta      chr2_canu.fasta  chr3.fasta       chr5_canu.fasta  chr6.fasta       chr8_canu.fasta  chr9.fasta
    chr10.fasta       chr1_canu.fasta  chr2.fasta       chr4_canu.fasta  chr5.fasta       chr7_canu.fasta  chr8.fasta       circoletto_pbs.sh
    chr11_canu.fasta  chr1.fasta       chr3_canu.fasta  chr4.fasta       chr6_canu.fasta  chr7.fasta       chr9_canu.fasta
> find . -name "chr{1..11}.fasta"

find명령이 아무것도 찾지 못하는 이유는 무엇입니까 ?

답변1

사용find-regex숫자 접미사가 있는 파일 이름을 찾는 옵션 은 1from 11:

find . -type f -regex ".*/chr\([1-9]\|1[01]\)\.fasta"

-regex 무늬
파일 이름이 정규식과 일치합니다.무늬. 이는 검색이 아닌 전체 경로에 대한 일치입니다.

답변2

before{1..3}afterzsh 중괄호 확장 연산자입니다(현재 다른 쉘에서도 지원됨).인용되지 않은 경우여러 인수( before1after, before2after) 로 확장된 before3after다음 명령에 전달됩니다.

인용할 때 는 {1..11}그대로 유지되며 find-name와일드카드 일치 연산자는 이를 특별히 처리하지 않으므로 {1..11}문자 그대로 이름이 붙은 파일만 찾습니다 chr{1..11}.fasta.

인용하지 않은 채로 놔두더라도 find어떻게 해야 할지 알 수 없습니다.

find . -name chr1.fasta chr2.fasta...

유용하려면 다음과 같아야 합니다.

find . \( -name chr1.fast  -o -name chr2.fasta... \)

그리고 이를 직접적으로 달성하기 위해 연산자를 사용할 수는 없습니다 {x..y}.

이 경우 다음을 수행할 수 있습니다.

find . \( -name 'chr[1-9].fast -o -name 'chr1[01].fasta' \) ...

find또는 구현에서 지원 하는 경우 정규 표현식과 동일합니다 .

zsh또는 의 고급 재귀 글로빙을 사용할 수도 있습니다 .

printf '%s\n' **/chr<1-11>.fasta

chr01.fasta또는 에서도 일치하며 chr011.fasta정렬된 목록을 제공하고 숨겨진 디렉터리를 건너뜁니다.

답변3

{}를 []로 변경합니다.

find . -name '*chr[1-11].fasta'

관련 정보