다음과 같이 이름을 바꾸고 싶은 이미지가 많이 있습니다.
*.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