대소문자를 구분하지 않는 패턴을 ls와 일치시키는 방법은 무엇입니까?

대소문자를 구분하지 않는 패턴을 ls와 일치시키는 방법은 무엇입니까?

대소문자를 무시하고 특정 패턴과 일치하는 모든 파일을 나열하고 싶습니다.

예를 들어 다음 명령을 실행합니다.

ls *abc*

대소문자를 무시하고 파일 이름에 "abc"가 포함된 모든 파일을 보고 싶습니다.

-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt

노트

맨 페이지에서 사례를 검색했지만 아무것도 찾을 수 없습니다.

답변1

이는 실제로 .dll이 아닌 쉘에 의해 수행됩니다 ls.

에서는 bash다음을 사용할 수 있습니다.

shopt -s nocaseglob

그리고그 다음에명령을 실행하십시오.

또는 zsh:

unsetopt CASE_GLOB

또는 야쉬에서:

set +o case-glob

그러면 주문이 옵니다.

.bashrc각각 , .zshrc또는 에 넣을 수도 있습니다 .yashrc.

또는 zsh를 사용하세요.

setopt extendedglob
ls -d -- (#i)*abc*

(즉, 와일드카드별로 대소문자를 구분하지 않는 와일드카드)

ksh93 사용:

ls -d -- ~(i:*abc*)

당신이 원하는와일드카드대신 쉘이 전달되는 파일 ls이기 때문에 다르게 작동합니다 .ls

답변2

*abc*Polemon이 설명했듯이 파일 목록으로 확장되는 것은 ls가 아닌 쉘입니다 . 이것은 ... 불리운다패턴 매칭.

대소문자를 무시하도록 전체 패턴 일치 동작을 변경하는 대신, *다음을 사용하면 bash에서 원하는 작업을 수행할 수 있습니다.

ls *[aA][bB][cC]*

bash 사용자로부터:

[...]는 포함된 문자 중 하나와 일치합니다.

이를 통해 보다 세분화된 일치가 가능합니다. *[aA][bB]c*또는 을 사용하여 일치시킬 수 있지만 또는 을 사용하여 일치시킬 수는 없습니다. 또는 해당 문자의 모든 인스턴스를 일치시키려는 프랑스어 예는 다음과 같습니다.abcABcabCABCe

ls *[eéèêëEÉÈÊË]*

답변3

-i(--ignore-case) 옵션을 추가하여 grep다음 출력을 얻을 수도 있습니다.

[root@localhost ~]# ls -l | grep -i abc
-rw-r--r--  1 root root    0 Feb 25 20:41 fileabc.txt
-rw-r--r--  1 root root    0 Feb 25 20:41 fileABC.txt

답변4

다음 코드를 사용하세요.

LC_COLLATE=en_US ; export LC_COLLATE
ls *abc*
LC_COLLATE=C ; export LC_COLLATE

관련 정보