대소문자를 무시하고 특정 패턴과 일치하는 모든 파일을 나열하고 싶습니다.
예를 들어 다음 명령을 실행합니다.
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*
또는 을 사용하여 일치시킬 수 있지만 또는 을 사용하여 일치시킬 수는 없습니다. 또는 해당 문자의 모든 인스턴스를 일치시키려는 프랑스어 예는 다음과 같습니다.abc
ABc
abC
ABC
e
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