Je débute en bash. j'ai écrit un petit script qui convertit tous les PDFs du dossier dans lequel il est lancé en jpeg.
#!/bin/sh
for I in *.pdf
do
pdftoppm $I a
convert a-000001.ppm $I.jpg
rm a-000001.ppm
done
for j in *.pdf.jpg
do
mv $j ${j%%.pdf.jpg}.jpg
done
Comme vous pouvez le voir, je n'ai pas réussi à ne "prendre" que la racine du nom du fichier pdf (sans son extension .pdf en simple). Donc je suis oubligé de l'enlever à la fin pour renommer tous mes *.pdf.jpg en *.jpg
D'autre part, le script convertis les fichiers du dossier dans lequel il est lancé mais je ne saurais lui indiquer un fichier spécifique.
Est-ce que vous pourriez m'aider à l'améliorer?
# basename
Posté par daggett . Évalué à 4.
Tu peux donc faire un convert a-000001.ppm `basename $I .pdf`.jpg (n'oublie pas le point !)
Sinon, tu sais que convert peut directement convertir un pdf en jpg, sans avoir besoin de passer par pdftoppm ? (Si c'est du multi-page il fera plusieurs jpegs)
[^] # Re: basename
Posté par eon2004 . Évalué à 2.
Merci à tous je vous plussoie
# La réponse est dans ton script !
Posté par Matthieu Moy (site web personnel) . Évalué à 4.
Si on l'écrit
est-ce que ça rend plus clair le fait qu'il y a plus simple ? ;-)
Sinon, man basename.
[^] # Re: La réponse est dans ton script !
Posté par eon2004 . Évalué à 2.
[^] # Re: La réponse est dans ton script !
Posté par Matthieu Moy (site web personnel) . Évalué à 2.
convert a-000001.ppm $I.jpg
par
convert a-000001.ppm ${j%%.pdf}.jpg
ou
convert a-000001.ppm $(basename ${j}).jpg
# basename
Posté par ArBaDaCarBa . Évalué à 4.
convert $pdf $1/`basename $pdf .pdf`.jpg
devrait aller.# fichiers en argument
Posté par daggett . Évalué à 4.
if [ $# -eq 0 ]; then
fichiers=*.pdf
else
fichiers=$*
fi
for I in $fichiers
do [ tes traitement]; done
Attention, si tu passes en argument un fichier qui n'est pas dans le repertoire courant, à bien écrire le résultat dans son répertoire ! (on le perd avec "basename", on le récupère avec "dirname". Autant garder ta substitution {%%} qui garde tout, et qui évite de lancer un binaire extérieur de plus à chaque tour de boucle.)
# Erreur classique
Posté par jerome (site web personnel) . Évalué à 4.
[^] # Re: Erreur classique
Posté par eon2004 . Évalué à 2.
# toujours tout afficher a l ecran ...
Posté par doublehp (site web personnel) . Évalué à 1.
for i in *.pdf
do echo $i
done
voila, je commence toujours par une boucle comme ca, et apres je remplis:
j=`echo $i | sed 's/.pdf/,jpg/'`
echo $j
convert $i $j
mais je te previens, utiliser convert pour pdf->jpg, tu vas etre decu du resultat. Enfin moi je l ai ete.
Lecon du jour: for i in *.pdf ne remplis pas i avec le contenu de l etoile, mais tout ce que retourne
ls *.pdf
[^] # Re: toujours tout afficher a l ecran ...
Posté par doublehp (site web personnel) . Évalué à 1.
for i in *.pdf
do echo $i
j=`echo $i | sed 's/.pdf/.jpg/'`
echo $j
convert $i $j
done
attention a la coquille: y avait une virgule a la place d un point.
# Avancement du script
Posté par eon2004 . Évalué à 3.
# Regarde s'il y a au moins 1 argument pour exécuter la commande
if [ $# -eq 0 ]; then
echo "Commande sans arguments: indiquer 'tout' pour convertir tout le répertoire"
else
#Déclaration du répertoire en cours comme lieu d'éxécution
cd ./
# Si l'argument est "tout" il saisit tous les PDFs du répertoire. Sinon il saisit les nom des fichiers spécifiés dans la commande
if [ $# == 1 ]; then
if [ $* == "tout" ]; then
fichiers=*.pdf
else
fichiers=$*
fi
else
fichiers=$*
fi
# Conversion des fichiers demandés
for I in $fichiers
do
# Conversion PDF > ppm
pdftoppm $I a
# Conversion ppm > jpg
convert a-000001.ppm `basename $I .pdf`.jpg
# Suppression du ppm intermédiaire
rm a-000001.ppm
echo "$I converti en jpeg"
done
fi
Je ne sais pas écrire la condition "différent de" qui permettrait de raccourcir la section 3 sur les argument des la commande.
Merci pour votre aide. :-)
[^] # Re: Avancement du script
Posté par Olivier Jeannet . Évalué à 3.
Tout simplement != comme c'est mentionné dans le manuel de bash (recherche la chaîne "=="). Ca marche pour les chaînes de caractères, ce qui est le cas ici.
Sinon pour les opérateurs arithmétiques c'est : -eq, -ne, -lt, -le, -gt, -ge (ce sont des abréviations anglaises bien sûr).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.