Mac 터미널 - *.png.png의 이름을 *.png로 바꿉니다.

Mac 터미널 - *.png.png의 이름을 *.png로 바꿉니다.

다음과 같이 이름을 바꾸고 싶은 이미지가 많이 있습니다.

  • *.png.png --> *.png
  • *.jpeg.jpg --> *.jpg
  • *.JPEG --> *.jpg

지금까지 시도한 유일한 것은 이지만 mv *.png.png *.png작동하지 않을 것이라는 것을 알고 있지만 어쨌든 위험을 감수했습니다.

이 패턴을 사용하여 파일 이름을 일괄적으로 바꾸는 쉬운 방법이 있습니까?

답변1

귀하의 질문에 대한 세 가지 경우에 대한 쉘 전용 솔루션은 다음과 같습니다.

for f in *.png.png ; do mv -i "${f}" "${f%.png}" ; done

for f in *.jpeg.jpg ; do mv -i "${f}" "${f%.jpeg.jpg}.jpg" ; done

for f in *.JPEG ; do mv -i "${f}" "${f%.JPEG}.jpg" ; done

파일 이름을 바꾸려는 디렉토리에 입력하십시오.

대체 postfix 스크립트 형태로 이러한 솔루션을 일반화하려면 다음을 수행할 수 있습니다.

#!/bin/sh
from=${1:?} to=${2:?}
for f in *${from} ; do mv -i "${f}" "${f%${from}}${to}" ; done

그리고 대체할 접미사와 새 접미사라는 두 개의 매개변수를 사용하여 스크립트를 호출합니다.

답변2

find이름을 바꾸는 데 사용되는 내용은 다음과 같습니다 *.png.png -> *.png.

find ./ -name '*.png.png' -type f \
        -exec sh -c 'mv {} ./$(basename -s .png.png {}).png' \;

실제로는 보편적이지 않으므로 다른 파일 확장자에 맞게 사용자 정의해야 합니다.

답변3

사용 rename. 여러 파일을 처리하도록 특별히 설계되었습니다.

더 짧습니다. 청소기.

*.png.png --> *.png

% rename 's/.png.png$/.png/' *.png

*.jpeg.jpg --> *.jpg

% rename 's/.jpeg.jpg$/.png/' *.jpeg.jpg

*.JPEG --> *.jpg

% rename 's/.JPEG$/.jpg/' *.JPEG

보다 포괄적인 매뉴얼:

% man rename

관련 정보