ImageMagick em vários arquivos

9

Eu converti um único arquivo de BMP para PNG com o ImageMagick convertusando o comando abaixo

convert CD\ Front.bmp CD\ Front.png

Eu tenho muitos desses arquivos, então tentei:

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

mas esse comando permanece para sempre.

O que estou fazendo errado?

user54619
fonte

Respostas:

12

Você provavelmente tem um problema porque não cita os nomes dos arquivos:

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

faça isso para que o espaço nos nomes dos arquivos não cause problemas.

Zelda
fonte
3
$fdeve ser citado também
Mat
Você está certo, obrigado por apontar
Zelda
1
A citação das variáveis ​​está correta, mas se você citar a glob, o shell procurará um literal */*.bmp.
evilsoup
Obrigado a você também. I deve experimentar minhas soluções antes de postar ...
Zelda
18

Você pode usar mogrify:

mogrify -format png *.bmp

Fonte: site Imagemagick

Thaldath
fonte
1

Eu refatoraria o código assim. Acho esse método mais claro e 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
JakeGould
fonte
1
Tomei a liberdade de mudar JPEG para PNG enquanto revia #
Anthon
Ahh obrigado. Mas funcionou para JPEGs também!
JakeGould
1
Sim, acho que sim, mas não foi o que o OP pediu ;-) #
Anthon
Não use find | while read, especialmente quando uma glob é suficiente.
Kevin
E o sed seria melhor como 's/\.bmp$/.png/', então, obviamente, retirar o .png do comando real
Kevin