이미지 폴더가 있습니다. 모두 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-bmp
file -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