파일을 반복하고 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

관련 정보