10, 11, 12로 끝나는 모든 파일을 나열하기 위해 시도했지만 아무것도 작동하지 않았습니다 ls *[10-12]
. ls *[10,11,12]
이유는 모르겠습니다. 누가 날 도울 수 있죠?
답변1
[...]
성냥하나특징 (요소 구성일부 쉘에서는) 지정된 컬렉션에 있는 경우.
[10-12]
까지 1
의 하나 이상의 문자 를 나타내므로 또는 1과 동일합니다.0
1
2
[102]
[0-2]
[10,11,12]
1
, 0
, ,
, 1
... 은 와 동일하다는 의미 입니다 [,0-2]
.
원하는 곳은 다음과 같습니다.
ls -d -- *1[0-2]
즉, (숨겨지지 않은) 파일 이름은 1로 끝나고 그 뒤에 0
, 1
또는 2
문자가 옵니다.
foo110
이제 or 와도 일치합니다 foo112345612
.
이것을 원하지 않으면 다음과 같은 것이 필요합니다.
ls -d -- *[!0-9]1[0-2] 1[0-2]
하지만 이건 어울리지 않아foo010
에서 과 를 일치시키 foo10
려면 또는 다음 을 foo00010
사용 하십시오 .foo110
foo10
foo00010
ksh
bash -O extglob
zsh -o kshglob
ls -d -- !(*[0-9])*(0)1[0-2]
with 를 제외하고 zsh
이러한 패턴 중 일치하지 않는 패턴이 있는 경우 그대로 전달되므로 ls
존재하는 경우 해당 이름의 파일이 생성될 수 있으며, 사용하지 않는 파일이 생성될 수 있습니다. 나열할 필요가 없습니다. 를 사용하면 이 문제를 해결하기 위한 옵션을 bash
설정할 수 있습니다 .failglob
zsh
숫자 범위와 일치하는 전역 연산자가 있는 유일한 쉘입니다.
ls -d -- *<10-12>
10에서 12 사이의 숫자로 끝나는 파일과 일치합니다. 뒤에 가 오기 foo110
때문에 일치할 수도 있습니다 . 다음을 사용하여 다음을 수행할 수 있습니다 .foo1
10
extendedglob
ls -d -- (^*[0-9])<10-12>
하지만.
zsh
또한 중괄호 확장 유형을 도입한 쉘입니다 {10..12}
(몇 년 후 ksh93 및 bash에 의해 복사됨).
그러나 {10,11,12}
동등한 것과 마찬가지로아니요와일드카드. 이는 와일드카드 이전에 수행된 확장 형식입니다.
ls -d -- *{10..12}
먼저 다음으로 확장하세요.
ls -d -- *10 *11 *12
zsh
3개의 glob 중 하나라도 실패하면 명령은 ( 및 )에서 중단됩니다 bash -O failglob
.
bash
1 그러나 일반적인 UTF-8 로케일의 GNU 시스템을 포함한 여러 셸 및 로케일에서는 ٠ота०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐를 포함하여 0과 1보다 많은 문자를 일치시킬 수 있습니다. en_US.UTF-8
᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇[0-1]
㍘꘠꣐꤀꧐ ꧰꩐꯰0
답변2
이 시도:
ls *{10,11,12}
또는
ls -l *{10,11,12}
(숨겨진 파일은 표시할 수 없습니다)
답변3
이것은 작동합니다:
ls -d -- *1[0-2]
이는 []
문자 세트를 나타냄을 기억하십시오. 숫자인 경우 [0-9]일 수 있습니다.
답변4
ls *@(10|11|12)
이것이 당신이 찾고 있는 것입니다.
extglob
이 기능은 다음을 사용하여 활성화 해야 합니다 .Shoput, 즉, shopt -s extglob
. 또한 이 줄을 추가하여 ~/.bashrc
영구적으로 활성화할 수 있습니다.
작동 방식에 대한 자세한 내용은 다음을 참조하세요.패턴 일치에 대한 공식 Bash 매뉴얼 페이지.