ImageMagick en múltiples archivos


9

He convertido un solo archivo de BMP a PNG con ImageMagick convertusando el siguiente comando

convert CD\ Front.bmp CD\ Front.png

Tengo muchos de esos archivos, por lo que probé:

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

pero este comando se cuelga para siempre.

¿Qué estoy haciendo mal?

Respuestas:


12

Lo más probable es que tenga un problema porque no cita los nombres de los archivos:

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

haga esto para que el espacio en los nombres de archivo no cause problemas.


3
$ftambién debería ser citado
Mat

Tienes razón, gracias por señalar
Zelda

1
Citar las variables es correcto, pero si cita el glob entonces el shell buscará un literal */*.bmp.
evilsoup

Gracias a ti también. Debería probar mis soluciones antes de publicar ...
Zelda


1

Refactorizaría el código así. Este método me parece más claro y fácil de depurar:

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
Me tomé la libertad de cambiar JPEG a PNG mientras revisaba
Anthon

Ahh, gracias ¡Pero también funcionó para JPEG!
JakeGould

1
Sí, supongo que sí, pero no fue lo que pidió el OP ;-)
Anthon

No lo use find | while read, especialmente cuando un globo sea suficiente.
Kevin

Y el sed sería mejor ya que 's/\.bmp$/.png/', obviamente, eliminaría el .png del comando real
Kevin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.