Quiero rotar todas las imágenes en un directorio que coincidan 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?
Respuesta aceptada:
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
como usted señala y también debe citarlo 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 líneas nuevas, pero al menos no se interrumpirá si su ruta contiene espacios.
Si todos los archivos están en el mismo directorio, se puede simplificar aún más usando globbing. También puede usar la expansión de parámetros para crear foo_rotated.JPG1
en lugar de foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done