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?

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.


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


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.