Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/01/2024, à 15:25

moromain

ImageMagick Convert dans des sous-répertoires

Bonjour,

Je souhaite convertir tous les jpeg d'un dossier en pdf. Pour ça, j'utilise :

convert *.jpeg fichier.pdf

Maintenant, comment faire pour :

  1. exécuter cette commande dans chaque sous-dossier d'un répertoire donné (parfois même dans des sous-dossiers de sous-dossiers !) ?

  2. donner le nom du répertoire au fichier pdf ?

  3. continuer s'il y a une erreur (en faisant quelques tests, je m'aperçois que certains pdf ne sont pas générés pour causes d'erreurs dans les jpeg) ?

J'ai testé des codes avec du find, sans aucun succès.
Merci d'avance !


XUbuntu 22.04

Hors ligne

#2 Le 03/01/2024, à 17:01

Vobul

Re : ImageMagick Convert dans des sous-répertoires

Bonjour,

Une réponse de l'IA :

Pour accomplir ces tâches en utilisant la ligne de commande sur un système UNIX ou Linux, vous pouvez employer une combinaison de commandes comme find, for et imagemagick pour parcourir les sous-dossiers, convertir les fichiers JPEG en PDF, nommer les fichiers PDF en fonction des répertoires et gérer les erreurs. Voici un exemple de script bash qui pourrait vous aider :

#!/bin/bash

# Parcours de tous les sous-dossiers du répertoire spécifié
find /chemin/vers/repertoire -type d | while read -r directory; do
    # Se déplacer dans chaque sous-dossier
    cd "$directory" || continue
    
    # Conversion des fichiers JPEG en PDF
    for file in *.jpeg; do
        if [ -f "$file" ]; then
            output_file="$(basename "$directory").pdf"
            convert "$file" "$output_file" 2>/dev/null || echo "Erreur : $file n'a pas été converti en $output_file"
        fi
    done
    
    # Revenir au répertoire parent pour continuer le parcours
    cd ..
done

Assurez-vous de remplacer /chemin/vers/repertoire par le chemin absolu du répertoire racine à partir duquel vous souhaitez commencer la conversion. Ce script parcourra tous les sous-dossiers, convertira les fichiers JPEG en PDF, nommera les fichiers PDF en fonction des répertoires et affichera un message d'erreur pour les fichiers qui ne peuvent pas être convertis.

N'oubliez pas de rendre le script exécutable avec la commande chmod +x script.sh et exécutez-le en utilisant ./script.sh dans le terminal après avoir apporté les modifications nécessaires. Assurez-vous également d'avoir ImageMagick installé pour utiliser la commande convert.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 03/01/2024, à 17:25

moromain

Re : ImageMagick Convert dans des sous-répertoires

J'avais déjà demandé à l'IA du "chat j'ai pété", pour une réponse semblable.
Visiblement, là, tous les dossiers ont bien été parcourus. Pas de pdf créés à la clé ! sad

Dernière modification par moromain (Le 03/01/2024, à 17:25)


XUbuntu 22.04

Hors ligne

#4 Le 03/01/2024, à 18:37

Watael

Re : ImageMagick Convert dans des sous-répertoires

le chat qui pète  n'a pas compris la question (là, ça met chaque jpeg un pdf*) et ça ne sait pas coder**
- il faut dire à find d'afficher sa sortie séparée par des caractère NULL, parce j'ai un répertoire

qui
fait chier

, donc :

find ... -printf '%p\0' | while read -d '' dirName ...done

- on ne change pas de répertoire dans un script : c'est source de confusion inutile
- bash a une option pour ne pas initier de Développement de paramètres s'il n'y a pas de correspondance avec le motif;le test est donc inutile.
- le shell peut, par une Remplacement de paramètre, retrouver cette information. : basename est donc une commande externe inutile

--
* la boucle for est donc aussi inutile.
** au moins, ça met des guillemets et pas d'accolades autour des variables. big_smile
---

je récapitule :

#!/bin/sh

origine= #à renseigner!
type='.jpeg'

find "$origine" -type d -printf '%p\0' \
    | while read -d '' repName
      do
          convert "$repName"/*"$type" "${repName##*/}.pdf" #mais si y a pas de fichiers?!!! eh ben convert affichera un message d'erreur.
      done

--
EDIT : correction ! je dis d'utiliser \0 et j'écris \n roll
smile

Dernière modification par Watael (Le 04/01/2024, à 23:51)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 03/01/2024, à 19:39

moromain

Re : ImageMagick Convert dans des sous-répertoires

Merci Watael pour cette réponse !

Retour du script :

read: Illegal option -d

XUbuntu 22.04

Hors ligne

#6 Le 03/01/2024, à 20:22

Watael

Re : ImageMagick Convert dans des sous-répertoires

ah, oui ?! sad sh ne connait pas cette option pour read. hmm
adapte le shebang pour utiliser bash.

Dernière modification par Watael (Le 03/01/2024, à 20:22)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 03/01/2024, à 20:52

moromain

Re : ImageMagick Convert dans des sous-répertoires

Watael a écrit :

adapte le shebang pour utiliser bash.

Heu... hmm Je ne comprends pas !


XUbuntu 22.04

Hors ligne

#8 Le 03/01/2024, à 20:55

Watael

Re : ImageMagick Convert dans des sous-répertoires

change #!/bin/sh, par #!/bin/bash.

sh peut ne pas être un lien vers /bin/bash, mais vers un shell plus strict, davantage conforme à la norme POSIX.

Dernière modification par Watael (Le 03/01/2024, à 20:56)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 04/01/2024, à 23:33

moromain

Re : ImageMagick Convert dans des sous-répertoires

Ok merci ! (je ne maîtrise pas ces différences sh/bash).
Retour du code :

syntaxe près du symbole inattendu « done »

XUbuntu 22.04

Hors ligne

#10 Le 04/01/2024, à 23:43

Watael

Re : ImageMagick Convert dans des sous-répertoires

ah !? là, je ne vois pas; je n'ai pas cette erreur.

Tu peux nous montrer le code que tu as utilisé, stp ?

--
edit: je peux reproduire l'erreur en omettant le do

EDIT #2 : correction ! je dis d'utiliser \0 et j'écris \n roll
smile

Dernière modification par Watael (Le 04/01/2024, à 23:52)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 05/01/2024, à 10:22

moromain

Re : ImageMagick Convert dans des sous-répertoires

Autant pour moi, il y avait une apostrophe dans le nom du dossier "origine". Corrigé => plus d'erreur !

Par contre, le script s'exécute en quelques secondes, sans sortie (il y a environ 40000 jpeg répartis dans plusieurs centaines de dossiers ! => je m'attends à un traitement un poil plus long !!).

#!/bin/bash

origine=/media/MonDossier
type='.jpeg'

find "$origine" -type d -printf '%p\n' \
    | while read -d '' repName
      do
          convert "$repName"/*"$type" "${repName##*/}.pdf"
      done

XUbuntu 22.04

Hors ligne

#12 Le 05/01/2024, à 10:49

Watael

Re : ImageMagick Convert dans des sous-répertoires

c'est l'objet de mon EDIT #2 de mon message précédent  : il faut modifier -printf '%p\n', par -printf '%p\0'

pour observer le comportement potentiel du script, tu peux mettre un echo devant le convert.
et retirer le echo pour exécuter le convert. big_smile

Dernière modification par Watael (Le 05/01/2024, à 10:50)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne