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?

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.


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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.