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?

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.


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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.