Je veux faire pivoter toutes les images d'un répertoire qui correspondent à un modèle.
Pour l'instant 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éponse acceptée :
Il y a pas mal de problèmes avec votre code. Tout d'abord, vous analysez ls, ce qui est une mauvaise idée. Vous devez également faire référence à la variable en tant que $file
comme vous le soulignez et vous devez également le citer afin qu'il ne se brise 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 retours à la 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, cela peut être encore simplifié en utilisant le globbing. 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