Traitement par lot de fichiers - script bash
Bonjour,
J'aimerais traiter toutes les images .jpg contenues dans le répertoire "images_sources" avec la commande
Code:
jpegtran -copy all -optimize -progressive -trim -drop +0+2304 nadir.jpg "$img" > "$output_img"
Le fichier 'nadir.jpg' est à la racine du projet, il ne change jamais. L'image contenue dans le répertoire 'images_sources' est patchée avec 'nadir.jpg' et le résultat est exporté dans le répertoire 'images_traitees'
J'ai bricolé un script mais il ne traite que la première image du répertoire source. Comme le modifier pour qu'elle soient toutes traitées une par une ?
le script en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #!/bin/bash
# Vérifier si le répertoire contenant les images existe
if [ ! -d "images_source" ]; then
echo "Erreur : Le répertoire 'images_source' n'existe pas."
exit 1
fi
# Créer le répertoire 'images_traitees' s'il n'existe pas déjà
if [ ! -d "images_traitees" ]; then
mkdir images_traitees
fi
# Créer une liste de toutes les images .jpg dans le répertoire images_source
images_to_process=()
for img in images_source/*.jpg; do
# Vérifier si l'image existe avant de l'ajouter
if [ -f "$img" ]; then
images_to_process+=("$img")
fi
done
# Si aucune image n'a été trouvée
if [ ${#images_to_process[@]} -eq 0 ]; then
echo "Aucune image .jpg trouvée dans le répertoire 'images_source'."
exit 1
fi
# Traiter chaque image avec jpegtran et incrémenter le nom du fichier de sortie dans 'images_traitees'
counter=1
for img in "${images_to_process[@]}"; do
output_img="images_traitees/image_nouvelle_${counter}.jpg"
# Traiter l'image
jpegtran -copy all -optimize -progressive -trim -drop +0+2304 nadir.jpg "$img" > "$output_img"
# Vérifier si la commande a réussi
if [ $? -eq 0 ]; then
echo "L'image $img a été traitée et sauvegardée sous '$output_img'."
else
echo "Une erreur est survenue lors du traitement de $img."
fi
# Incrémenter le compteur pour le nom du fichier suivant
((counter++))
done |