Quiero rotar todas las imágenes en un directorio que coincida con un patrón.
Hasta ahora tengo:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
pero eso no da salida?
Quiero rotar todas las imágenes en un directorio que coincida con un patrón.
Hasta ahora tengo:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
pero eso no da salida?
Respuestas:
Hay bastantes problemas con su código. En primer lugar, está analizando ls, que es una mala idea . También debe referirse a la variable como $file
señala y también debe citarla para que no se rompa en espacios. Estás declarando num
pero nunca se usa. Una forma más segura sería:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Esto seguirá teniendo problemas si sus archivos contienen nuevas líneas, pero al menos no se romperán si su ruta contiene espacios.
Si todos los archivos están en el mismo directorio, puede simplificarse aún más con globbing. También puede usar la expansión de parámetros para crear en foo_rotated.JPG1
lugar de 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
El mejor One-Liner para rotar todas las imágenes con imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
de hecho rotará todo .JPG
comenzando DSC
en el p
directorio
Mogrify (parte de imagemagick) difiere Convert
en que modifica el archivo original
http://www.imagemagick.org/script/mogrify.php
Un método simple que usa PE (expansión de parámetros) es
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
específico allí, es una sintaxis sh POSIX perfectamente estándar.
No analizarls
y ls
no se requiere aquí. Además, debe citar sus variables en caso de que contengan espacios.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
No es una solución imagemagic, pero
sips -r 90 *.JPG
rotará todas las imágenes que terminen en .JPG 90 grados. Es un buen trazador de líneas.
Necesitaba referirme al archivo como $file
, es decir
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Puede copiar / pegar este código en ubuntu y guardarlo como "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Después de guardar este archivo, ejecútelo desde la terminal usando ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. agregar"${file%.JPG}"_rotated.JPG
será más apropiado en mi humilde opinión. ¡Salud!