IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Traitement par lot de fichiers - script bash


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    juriste
    Inscrit en
    Février 2025
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : juriste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2025
    Messages : 2
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
      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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 557
    Par défaut
    Salut,

    Que renvoie le script avec l'option set -x utilisée pour le débogage ?

    https://www.linuxbash.sh/post/debugg...pts-with-set-x
    Debugging Bash Scripts with `set -x` - Linux Bash
    [Edit]
    Une traduction partielle de l'article en français avec un «webtraducteur» :

    Conseils pour un débogage efficace avec set -x

    Limiter la portée : utilisez uniquement set -x autour des blocs de code spécifiques que vous souhaitez déboguer. Le fait de l'activer pour l'ensemble du script peut générer trop de résultats et rendre difficile l'identification des informations pertinentes.

    Combiner avec d'autres outils : bien que puissant, set -x ne fournit pas d'informations sur l'état des variables à moins que ces variables ne fassent partie d'une commande. C'est donc souvent une bonne idée de le compléter avec set -v, qui affiche les lignes d'entrée du shell au fur et à mesure qu'elles sont lues, ou d'afficher manuellement des variables à l'aide d'echo.

    Analysez la sortie en profondeur : Bien que set -x vous donne beaucoup d'informations, il est essentiel de comprendre ce que signifie chaque ligne de sortie. Cela vous aidera à mieux interpréter le résultat et à prendre des décisions éclairées sur la façon de résoudre les problèmes.
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    juriste
    Inscrit en
    Février 2025
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : juriste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2025
    Messages : 2
    Par défaut
    C'est le caractère dans la commande qui provoquait un échappement et cassait la boucle apparemment.

    J'ai changé l’utilitaire par un autre qui prend les arguments de manière plus conventionnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composite nadir.jpg "$image" -geometry +0+2304 "$image_nadir"
    et ça fonctionne !

    Merci pour le retour.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 644
    Par défaut
    Citation Envoyé par Med21000
    C'est le caractère > dans la commande qui provoquait un échappement et cassait la boucle apparemment.
    le man indique une option -outfile
    Citation Envoyé par man jpegtran
    -outfile name Send output image to the named file, not to standard output.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Excel traitement par lot de fichiers
    Par slackuser dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/01/2021, 08h55
  2. [Débutant] Traitement par lot des fichiers d'un répertoire (listing)
    Par mat_elot dans le forum Scilab
    Réponses: 2
    Dernier message: 15/11/2018, 18h44
  3. Réponses: 5
    Dernier message: 20/02/2017, 04h47
  4. Traitement par lot fichiers PDF
    Par Triton972 dans le forum Imagerie
    Réponses: 1
    Dernier message: 10/01/2012, 15h18
  5. [FTP] Traitement par lot
    Par gandalf76fr dans le forum Langage
    Réponses: 5
    Dernier message: 06/11/2007, 23h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo