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숫자 접미사가 있는 파일 이름을 찾는 옵션은 1다음 과 같습니다 11.

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

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

답변2

before{1..3}afterzsh 중괄호 확장 연산자입니다(현재 다른 쉘에서도 지원됨)참조가 없을 때여러 매개변수로 확장한 다음 before1after명령 에 전달합니다.before2afterbefore3after

참조하면 {1..11}Asis로 남고 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.fastaor 와 일치하여 chr011.fasta정렬된 목록을 제공하고 숨겨진 디렉터리를 건너뜁니다.

답변3

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

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

관련 정보