
> 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}after
zsh 중괄호 확장 연산자입니다(현재 다른 쉘에서도 지원됨)참조가 없을 때여러 매개변수로 확장한 다음 before1after
명령 에 전달합니다.before2after
before3after
참조하면 {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.fasta
or 와 일치하여 chr011.fasta
정렬된 목록을 제공하고 숨겨진 디렉터리를 건너뜁니다.
답변3
{}를 [] 등으로 변경합니다.
find . -name '*chr[1-11].fasta'