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 $file
vous le faites remarquer et vous devez également la citer pour qu'elle ne se casse pas sur les espaces. Vous déclarez num
mais 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.JPG1
au 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 .JPG
commençant par DSC
dans le p
répertoire
Mogrify (qui fait partie d'imagemagick) diffère du Convert
fait 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
bash
spécifique là-dedans, c'est une syntaxe POSIX sh parfaitement standard.
Ne pas analyserls
et le ls
n'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.JPG
sera à mon humble avis plus approprié. À votre santé!