10, 11, 12로 끝나는 모든 파일 나열

10, 11, 12로 끝나는 모든 파일 나열

10, 11, 12로 끝나는 모든 파일을 나열하기 위해 시도했지만 아무것도 작동하지 않았습니다 ls *[10-12]. ls *[10,11,12]이유는 모르겠습니다. 누가 날 도울 수 있죠?

답변1

[...]성냥하나특징 (요소 구성일부 쉘에서는) 지정된 컬렉션에 있는 경우.

[10-12]까지 1의 하나 이상의 문자 를 나타내므로 또는 1과 동일합니다.012[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사용 하십시오 .foo110foo10foo00010kshbash -O extglobzsh -o kshglob

ls -d -- !(*[0-9])*(0)1[0-2]

with 를 제외하고 zsh이러한 패턴 중 일치하지 않는 패턴이 있는 경우 그대로 전달되므로 ls존재하는 경우 해당 이름의 파일이 생성될 수 있으며, 사용하지 않는 파일이 생성될 수 있습니다. 나열할 필요가 없습니다. 를 사용하면 이 문제를 해결하기 위한 옵션을 bash설정할 수 있습니다 .failglob

zsh숫자 범위와 일치하는 전역 연산자가 있는 유일한 쉘입니다.

ls -d -- *<10-12>

10에서 12 사이의 숫자로 끝나는 파일과 일치합니다. 뒤에 가 오기 foo110때문에 일치할 수도 있습니다 . 다음을 사용하여 다음을 수행할 수 있습니다 .foo110extendedglob

ls -d -- (^*[0-9])<10-12>

하지만.

zsh또한 중괄호 확장 유형을 도입한 쉘입니다 {10..12}(몇 년 후 ksh93 및 bash에 의해 복사됨).

그러나 {10,11,12}동등한 것과 마찬가지로아니요와일드카드. 이는 와일드카드 이전에 수행된 확장 형식입니다.

ls -d -- *{10..12}

먼저 다음으로 확장하세요.

ls -d -- *10 *11 *12

zsh3개의 glob 중 하나라도 실패하면 명령은 ( 및 )에서 중단됩니다 bash -O failglob.


bash1 그러나 일반적인 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 매뉴얼 페이지.

관련 정보