ImageMagick pada banyak file

9

Saya telah mengonversi satu file dari BMP ke PNG dengan ImageMagick convertmenggunakan perintah di bawah ini

convert CD\ Front.bmp CD\ Front.png

Saya punya banyak file seperti itu, jadi saya mencoba:

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

tetapi perintah ini hang selamanya.

Apa yang saya lakukan salah?

pengguna54619
sumber

Jawaban:

12

Kemungkinan besar Anda memiliki masalah karena Anda tidak mengutip nama file:

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

lakukan ini agar ruang dalam nama file tidak menimbulkan masalah.

Zelda
sumber
3
$fharus dikutip juga
Mat
Anda benar, terima kasih telah menunjukkan
Zelda
1
Mengutip variabel sudah benar, tetapi jika Anda mengutip glob maka shell akan mencari literal */*.bmp.
evilsoup
Terima kasih juga untukmu. Saya harus mencoba solusi saya sebelum memposting ...
Zelda
18

Anda dapat menggunakan mogrify:

mogrify -format png *.bmp

Sumber: situs web Imagemagick

Thaldath
sumber
1

Saya akan memperbaiki kode seperti ini. Saya menemukan metode ini menjadi lebih jelas & lebih mudah untuk di-debug:

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
sumber
1
Saya mengambil kebebasan untuk mengubah JPEG menjadi PNG saat meninjau
Anthon
Ahh terima kasih. Tapi itu berhasil untuk JPEG juga!
JakeGould
1
Ya, tebak ya, tapi bukan itu yang diminta OP ;-)
Anthon
Jangan gunakan find | while read, terutama saat gumpalan cukup.
Kevin
Dan sed akan lebih baik karena 's/\.bmp$/.png/', maka jelas menghapus .png dari perintah sebenarnya
Kevin