bash 쉘 : .png 또는 .PNG 유형의 모든 파일을 나열 하시겠습니까? 대해 어떻게 말할

bash 스크립트에서 ‘.png 또는 .PNG 유형의 모든 파일에 대해 어떻게 말할 수 있습니까?

노력하고있어 :

for i in (`ls *.PNG` && `ls *.png`)

구문 오류가 발생했습니다.



답변

가능한 모든 조합을 원하면 다음을 사용하십시오.

for i in *.[Pp][Nn][Gg]; do

또는

shopt -s nocaseglob
for i in *.png; do

이 스크립트를 실행하기 전까지는 모든 스크립트 쉘 글로브 (예 : 와일드 카드 파일 일치)를 대소 문자를 구분하지 않습니다 shopt -u nocaseglob.

.PNG 및 .png 만 원한다면 (예 : .PnG 또는 .pnG는 아님) 다음 중 하나를 사용하십시오.

shopt -s nullglob
for i in *.png *.PNG; do

또는

for i in *.png *.PNG; do
    [[ -e "$i" ]] || continue

nullglob 또는 존재 검사의 이유는 소문자 또는 대문자 확장자 만있는 경우 파일 목록에 일치하지 않는 패턴이 포함되어 루프 본문에 오류가 발생하기 때문입니다. nocaseglob와 마찬가지로 나중에 nullglob 셸 옵션을 끄고 싶을 수도 있습니다 (Nullglob을 사용한 경험이 종종 스크립트에서 특히 좋지만). 실제로, 나는 일치하는 것이없는 경우를 대비하여 모든 파일 일치에 대해 nocaseglob 또는 존재 확인을 사용하는 것이 좋습니다.


답변

당신은 또한 같은 하나의 라이너를 시도 할 수 있습니다

찾기 . -iname “* .png”-exec ….

또는

찾기 . -iname “* .png”| xargs ….

편집
재귀에 대한 아래의 @Yab 의견도 참조하십시오.


답변

ls 여기에 거의 쓸모가 없지만 여기에 대한 기록은 시도에 더 가까운 구문입니다.

for i in $(ls *.PNG ; ls *.png)

노트:

  • 대문자와 소문자 그림을 모두 원한다고 가정합니다. && 구분 기호는 PNG 파일이 존재하는 경우에만 png 파일을 처리한다는 것을 의미합니다.
  • 두 패턴 중 어느 파일도 발견되지 않으면 오류 메시지가 표시됩니다.

답변