JP(E)G로 끝나는 디렉토리에 있는 한 형식 또는 다른 형식의 모든 파일을 나열하는 별칭을 작성하려고 합니다. 제가 인식하기 위해 찾고 있는 것은 .jpg, .JPG, .jpeg 및 .JPEG입니다.
ls 형식이 있습니까(또는엘에스find 또는 grep과 같은 다른 명령과 함께 이 작업을 수행할 수 있습니까?
답변1
짧은 답변
캔트. 그러나 파일 끝부분의 대소문자 구분이나 주석을 ls
나열할 방법은 없습니다 . 쉘 은 파일 목록으로 .jpg
변환 하고 해당 목록을 .*.jpg
ls
echo *.jpg
긴 대답
다음을 사용할 수 있습니다 find
.find . -iname "*.jpg" -o -iname "*.jpeg"
또는 예를 들어 grep을 사용하십시오.ls | grep -iE "[.]jpe?g$"
또는쉘을 대소문자를 구분하지 않는 glob으로 설정하십시오.shopt -s nocaseglob
(이것은 Bash에서 작동합니다.대소문자를 구분하지 않는 패턴을 ls와 일치시키는 방법은 무엇입니까?다른 쉘을 위한 솔루션. )
답변2
ls
확장된 와일드카드가 아니라 셸이라는 점에 유의하세요 .
bash
이 옵션은 단일 glob 또는 단일 glob의 일부를 대소 문자를 구분하지 않게 만드는 glob 연산자와 반대로 모든 glob을 대소 문자를 구분하지 않게 만드는 nocaseglob
데 사용할 수 있습니다 .ksh93
zsh
그러나 언제든지 다음과 같이 할 수 있습니다.
ls -ld -- *.[jJ][pP][gG]
이는 또한 주어진 문자의 소문자 또는 대문자 변형이 무엇인지 로케일에서 결정하지 못하게 하는 이점이 있습니다(예: gif
GIF
또는 ?의 대문자 변형 입니까 GİF
?).
또는 extglob
다음을 포함하도록 선택할 수 있습니다 jpeg
.
ls -ld -- *.[jJ][pP]?([eE)[gG]
zsh
, 및 옵션 extendedglob
( )을 사용하세요 set -o extendedglob
.
ls -ld -- *.(#i)jp(e|)g
그리고 ksh93
:
ls -ld -- *.~(i)jp?(e)g
또는:
ls -ld -- *.~(i:jp?(e)g)