Voglio ruotare tutte le immagini in una directory che corrispondono a uno schema.
Finora ho:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ma questo non dà output?
Risposta accettata:
Ci sono alcuni problemi con il tuo codice. Prima di tutto, stai analizzando ls che è una cattiva idea. Devi anche fare riferimento alla variabile come $file
come fai notare e dovresti anche citarlo in modo che non si rompa negli spazi. Stai dichiarando num
ma non viene mai utilizzato. Un modo più sicuro sarebbe:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Questo avrà ancora problemi se i tuoi file contengono nuove righe, ma almeno non si interromperà se il tuo percorso contiene spazi.
Se i file si trovano tutti nella stessa directory, può essere ulteriormente semplificato utilizzando il globbing. Puoi anche usare l'espansione dei parametri per creare foo_rotated.JPG1
invece di foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done