Voglio ruotare tutte le immagini in una directory che corrisponda a un modello.
Finora ho:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ma questo non dà output?
Voglio ruotare tutte le immagini in una directory che corrisponda a un modello.
Finora ho:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
ma questo non dà output?
Risposte:
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
fai notare e dovresti anche citarla in modo che non si spezzi sugli spazi. Stai dichiarando num
ma non viene mai usato. 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
Ciò avrà ancora problemi se i file contengono nuove righe, ma almeno non si interromperanno se il percorso contiene spazi.
Se i file si trovano tutti nella stessa directory, è possibile semplificarli ulteriormente utilizzando il globbing. È inoltre possibile utilizzare l'espansione dei parametri per creare foo_rotated.JPG1
anziché 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
Il miglior One-Liner per ruotare tutte le immagini con imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
infatti ruoterà tutto a .JPG
partire da DSC
nella p
directory
Mogrify (parte di imagemagick) differisce dal fatto Convert
che modifica il file originale
http://www.imagemagick.org/script/mogrify.php
Un metodo semplice che utilizza PE (Parameter Expansion) è
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
specifico lì dentro, è la sintassi sh POSIX perfettamente standard.
Non analizzarels
e ls
qui non è richiesto. Inoltre, dovresti citare le tue variabili nel caso in cui contengano spazi.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Non una soluzione imagemagic, ma
sips -r 90 *.JPG
ruoterà tutte le immagini che terminano in .JPG di 90 gradi. È una buona fodera.
Avevo bisogno di fare riferimento al file come $file
, ad es
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Puoi copiare / incollare questo codice in Ubuntu e salvarlo come "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Dopo aver salvato questo file, eseguirlo dal terminale usando ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. l'aggiunta"${file%.JPG}"_rotated.JPG
sarà un imho più appropriato. Saluti!