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


9

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

convert CD\ Front.bmp CD\ Front.png

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

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

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

何が悪いのですか?

回答:


12

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

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

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


3
$f引用する必要があります
Mat

あなたは正しい、指摘してくれてありがとう
ゼルダ

1
変数の引用は正しいですが、グロブを引用すると、シェルはリテラルを探します*/*.bmp
evilsoup 2013

あなたにも感謝します。投稿する前に自分の解決策を試してみる必要があります...
ゼルダ、


1

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

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
レビュー中にJPEGをPNGに自由に変更しました
Anthon

ああ、ありがとう。しかし、JPEGでも同様に機能しました。
JakeGould 2013

1
はい、そうですが、OPが要求したものではありませんでした;-)
Anthon

find | while read特にglobで十分な場合は、を使用しないでください。
ケビン

そして、sedはとしてより良いでしょう、そして's/\.bmp$/.png/'実際のコマンドから明らかに.pngを削除します
Kevin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.