Ich möchte alle Bilder in einem Verzeichnis drehen, die einem Muster entsprechen.
Bisher habe ich:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
aber das gibt keine ausgabe?
Ich möchte alle Bilder in einem Verzeichnis drehen, die einem Muster entsprechen.
Bisher habe ich:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
aber das gibt keine ausgabe?
Antworten:
Es gibt einige Probleme mit Ihrem Code. Zunächst analysieren Sie ls, was eine schlechte Idee ist . Sie müssen auch auf die Variable verweisen, $file
wie Sie es hervorheben, und Sie sollten sie auch in Anführungszeichen setzen, damit sie bei Leerzeichen nicht unterbrochen wird. Sie erklären, num
aber es wird nie verwendet. Ein sicherer Weg wäre:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Dies wird immer noch Probleme haben, wenn Ihre Dateien Zeilenumbrüche enthalten, aber zumindest nicht, wenn Ihr Pfad Leerzeichen enthält.
Wenn sich alle Dateien im selben Verzeichnis befinden, kann dies durch Globbing weiter vereinfacht werden. Sie können auch Parameter Erweiterung zum Erstellen foo_rotated.JPG1
statt foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
mogrify -rotate 90 *.jpg
Der bessere Einzeiler zum Drehen aller Bilder mit imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
dreht sich also alles .JPG
beginnend mit DSC
im p
Verzeichnis
Mogrify (ein Teil von imagemagick) unterscheidet sich Convert
darin, dass es die Originaldatei http://www.imagemagick.org/script/mogrify.php ändert
Eine einfache Methode mit PE (Parameter Expansion) ist
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
Spezifisches gibt, es ist die vollkommen standardmäßige POSIX-sh-Syntax.
Nicht analysierenls
und das ls
ist hier nicht erforderlich. Darüber hinaus sollten Sie Ihre Variablen in Anführungszeichen setzen, falls sie Leerzeichen enthalten.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Keine imagemagische Lösung, aber
sips -r 90 *.JPG
dreht alle Bilder, die mit .JPG enden, um 90 Grad. Es ist ein guter Einzeiler.
Ich musste mich auf die Datei beziehen als $file
, dh
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Sie können diesen Code in Ubuntu kopieren / einfügen und als "rotate.sh" speichern.
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Führen Sie diese Datei nach dem Speichern über das Terminal aus ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. Hinzufügen"${file%.JPG}"_rotated.JPG
wird besser geeignet sein, imho. Prost!