> 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
from 11
:
find . -type f -regex ".*/chr\([1-9]\|1[01]\)\.fasta"
-regex
무늬
파일 이름이 정규식과 일치합니다.무늬. 이는 검색이 아닌 전체 경로에 대한 일치입니다.
답변2
before{1..3}after
zsh 중괄호 확장 연산자입니다(현재 다른 쉘에서도 지원됨).인용되지 않은 경우여러 인수( 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'