web-dev-qa-db-ja.com

複数のファイルに対するImageMagick

以下のコマンドを使用して、ImageMagickのconvertを使用して単一のファイルをBMPからPNGに変換しました

convert CD\ Front.bmp CD\ Front.png

私はそのようなファイルをたくさん持っているので、私は試しました:

for f in */*.bmp ; do convert $f ${f%bmp}png; done

しかし、このコマンドは永久にハングします。

何が悪いのですか?

8
user54619

ファイル名を引用符で囲まないため、問題が発生する可能性があります。

for f in */*.bmp ; do convert "$f" "${f%bmp}png" ; done
#                             ^  ^ ^           ^

これを行うのは、ファイル名のスペースが問題を引き起こさないようにするためです。

12
Zelda

Mogrifyを使用できます:

mogrify -format png *.bmp

出典: Imagemagickウェブサイト

18
Thaldath

このようにコードをリファクタリングします。私はこの方法がより明確でデバッグしやすいと思います:

find . -type f -name '*.bmp' |\
  while read BMP
  do
    DIR=$(dirname "$BMP")
    PNG="$(echo $BMP | sed 's/.bmp//g')"
    convert "${BMP}" "${PNG}".png
  done
1
JakeGould