#1 Le 03/01/2024, à 14: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 :
exécuter cette commande dans chaque sous-dossier d'un répertoire donné (parfois même dans des sous-dossiers de sous-dossiers !) ?
donner le nom du répertoire au fichier pdf ?
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 24.04
Hors ligne
#2 Le 03/01/2024, à 16: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, à 16: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é !
Dernière modification par moromain (Le 03/01/2024, à 16:25)
XUbuntu 24.04
Hors ligne
#4 Le 03/01/2024, à 17: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.
---
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
Dernière modification par Watael (Le 04/01/2024, à 22:51)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 03/01/2024, à 18:39
- moromain
Re : ImageMagick Convert dans des sous-répertoires
Merci Watael pour cette réponse !
Retour du script :
read: Illegal option -d
XUbuntu 24.04
Hors ligne
#6 Le 03/01/2024, à 19:22
- Watael
Re : ImageMagick Convert dans des sous-répertoires
ah, oui ?! sh ne connait pas cette option pour read.
adapte le shebang pour utiliser bash.
Dernière modification par Watael (Le 03/01/2024, à 19:22)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 03/01/2024, à 19:52
- moromain
Re : ImageMagick Convert dans des sous-répertoires
adapte le shebang pour utiliser bash.
Heu... Je ne comprends pas !
XUbuntu 24.04
Hors ligne
#8 Le 03/01/2024, à 19: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, à 19:56)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 04/01/2024, à 22: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 24.04
Hors ligne
#10 Le 04/01/2024, à 22: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
Dernière modification par Watael (Le 04/01/2024, à 22:52)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 05/01/2024, à 09: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 24.04
Hors ligne
#12 Le 05/01/2024, à 09: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.
Dernière modification par Watael (Le 05/01/2024, à 09:50)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne