ファイルを繰り返して、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

関連情報