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?
Akzeptierte Antwort:
Es gibt einige Probleme mit Ihrem Code. Zuallererst parsen Sie ls, was eine schlechte Idee ist. Sie müssen auch auf die Variable als $file
verweisen wie Sie darauf hinweisen, und Sie sollten es auch zitieren, damit es nicht in Leerzeichen bricht. Sie deklarieren num
aber es wird nie benutzt. 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 wird es nicht brechen, wenn Ihr Pfad Leerzeichen enthält.
Wenn sich die Dateien alle im selben Verzeichnis befinden, kann dies durch Globbing weiter vereinfacht werden. Sie können auch die Parametererweiterung verwenden, um foo_rotated.JPG1
zu erstellen statt foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done