Je veux faire pivoter toutes les images d'un répertoire qui correspondent à un motif.
Jusqu'à présent, j'ai:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
mais cela ne donne aucune sortie?
Je veux faire pivoter toutes les images d'un répertoire qui correspondent à un motif.
Jusqu'à présent, j'ai:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
mais cela ne donne aucune sortie?
Réponses:
Il y a pas mal de problèmes avec votre code. Tout d'abord, vous analysez ls qui est une mauvaise idée . Vous devez également faire référence à la variable comme $filevous le faites remarquer et vous devez également la citer pour qu'elle ne se casse pas sur les espaces. Vous déclarez nummais il n'est jamais utilisé. Un moyen plus sûr serait:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Cela aura toujours des problèmes si vos fichiers contiennent des sauts de ligne mais au moins ne se cassera pas si votre chemin contient des espaces.
Si les fichiers sont tous dans le même répertoire, il peut être encore simplifié en utilisant la globalisation. Vous pouvez également utiliser l'expansion des paramètres pour créer foo_rotated.JPG1au lieu 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
Le meilleur One-Liner pour faire pivoter toutes les images avec imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
va en fait tourner tout en .JPGcommençant par DSCdans le prépertoire
Mogrify (qui fait partie d'imagemagick) diffère du Convertfait qu'il modifie le fichier d'origine
http://www.imagemagick.org/script/mogrify.php
Une méthode simple utilisant PE (Parameter Expansion) est
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bashspécifique là-dedans, c'est une syntaxe POSIX sh parfaitement standard.
Ne pas analyserls et le lsn'est pas requis ici. De plus, vous devez citer vos variables au cas où elles contiennent des espaces.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Pas une solution imaginaire, mais
sips -r 90 *.JPG
fera pivoter toutes les images se terminant par .JPG à 90 degrés. C'est une bonne doublure.
Je devais me référer au fichier comme $file, c.-à-d.
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Vous pouvez copier / coller ce code dans ubuntu, et l'enregistrer sous "rotation.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Après avoir enregistré ce fichier, exécutez-le à partir du terminal en utilisant ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG". l'ajout"${file%.JPG}"_rotated.JPGsera à mon humble avis plus approprié. À votre santé!