파일을 반복하고 BMP 파일을 JPG로 변환합니다.

파일을 반복하고 BMP 파일을 JPG로 변환합니다.

이미지 폴더가 있습니다. 모두 JPG 확장자를 가지고 있지만 file몇몇에 대해 실행하면 비트맵으로 다시 돌아옵니다.

25818.jpg: PC bitmap, Windows 3.x format, 357 x 500 x 24

내 질문은 어떻게 모든 이미지를 반복하고 비트맵 파일인지 확인한 다음 JPG로 변환할 수 있느냐는 것입니다.

단일 사례에 사용할 명령은 다음과 같지만 파일 확인 및 루프를 수행하는 방법을 잘 모르겠습니다.

mogrify -format jpg 25818.jpg

감사해요

답변1

while IFS='' read -rd '' filename; do 
  [[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
      && mogrify -format jpg "$filename"
done < <(LC_ALL=C find . -maxdepth 1 -name '*.jpg' -print0)

의 인수로 BMP 파일이 주어졌을 때 file출력 버전이 제공되면 작동합니다 . 그렇지 않으면 스크립트를 수정해야 합니다.image/x-ms-bmpfile -b --mime-type

많은 사용자는 더 간단한 버전에 만족할 것입니다.

for filename in ./*.jpg; do 
  [[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
      && mogrify -format jpg "$filename"
done

그러나 다음과 같은 상황에서는 실패할 수 있습니다. 1)매우많은 수의 파일매우긴 이름(예: 평균 길이의 파일 이름 30000개) 2) 파일 이름에 정말 이상한 문자가 포함된 경우.

첫 번째 버전은 이러한 드물게 발생하는 불편함을 보장합니다.

답변2

를 사용하면 exiftool다음을 수행할 수 있습니다.

exiftool -q -r -ext jpg -if '
  $FileType eq "BMP" and !print "$Directory/$FileName\0"' . |
  xargs -r0 mogrify -format jpg

관련 정보