ImageMagick在多个文件上


9

convert使用以下命令使用ImageMagick将单个文件从BMP转换为PNG

convert CD\ Front.bmp CD\ Front.png

我有很多这样的文件,因此我尝试了:

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

但是此命令将永远挂起。

我究竟做错了什么?

Answers:


12

您很可能有问题,因为您没有引用文件名:

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

这样做可以避免文件名中的空格引起问题。


3
$f也应引用
Mat Mat 2013年

您说得对,谢谢您指出
Zelda 2013年

1
引用变量是正确的,但是如果引用glob,则外壳将查找文字*/*.bmp
evilsoup

也感谢你。我应该在发布之前尝试解决方案...
Zelda 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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.