ImageMagick für mehrere Dateien

9

Ich habe eine einzelne Datei mit ImageMagick von BMP nach PNG konvertiert, convertindem ich den folgenden Befehl verwendet habe

convert CD\ Front.bmp CD\ Front.png

Ich habe viele solcher Dateien, also habe ich versucht:

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

aber dieser Befehl hängt für immer.

Was mache ich falsch?

user54619
quelle

Antworten:

12

Sie haben höchstwahrscheinlich ein Problem, weil Sie die Dateinamen nicht angeben:

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

Tun Sie dies, damit der Platz in den Dateinamen keine Probleme verursacht.

Zelda
quelle
3
$fsollte auch zitiert werden
Mat
Sie haben Recht, danke für den Hinweis
Zelda
1
Das Zitieren der Variablen ist korrekt, aber wenn Sie den Glob zitieren, sucht die Shell nach einem Literal */*.bmp.
Evilsoup
Danke auch an dich. Ich sollte meine Lösungen vor dem Posten ausprobieren ...
Zelda
18

Sie können mogrify verwenden:

mogrify -format png *.bmp

Quelle: Imagemagick-Website

Thaldath
quelle
1

Ich würde den Code so umgestalten. Ich finde diese Methode klarer und einfacher zu debuggen:

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
quelle
1
Ich habe mir erlaubt, JPEG während der Überprüfung in PNG zu ändern
Anthon
Ahh, danke. Aber es hat auch bei JPEGs funktioniert!
JakeGould
1
Ja, denke schon, aber es war nicht das, was das OP verlangt hat ;-)
Anthon
Nicht verwenden find | while read, besonders wenn ein Globus ausreicht.
Kevin
Und die sed wäre besser als 's/\.bmp$/.png/', dann offensichtlich die .png aus dem eigentlichen Befehl entfernen
Kevin