Forum Programmation.shell boucle for

Posté par  .
Étiquettes : aucune
0
20
mar.
2006
B'jour
admettons que j'ai plein de fichier .ps que je veux convertir en pdf.
je fais
ps2pdf fichier.ps fichier.pdf mais les faire un par un c'est pas génial
donc hop hop je me suis dit "autant faire un pitit script, tu te feras moins ch???"
je suppose que je dois faire une boucle for...
genre
for i in *.ps
do ps2pdf [là je bloque]
done

j'ai essayé avec ps2pdf $i $i.pdf (ça m'a semblé logique sur le coup...)
avec ps2pdf $@ $@.pdf
marche pas....
comment je peux faire?
merci

heu aussi... pourquoi $i c'est tout les fichiers *ensemble* repérés par la boucle et pas l'ensemble des fichiers chacun séparement ...? c'est clair? °~°
  • # basename est ton ami !

    Posté par  . Évalué à 2.

    for i in *.ps
    do
    ps2pdf $i $(basename $i .ps).pdf
    done

    L'appel à basename gicle le .ps de la fin...
  • # pourquoi for i in *.ps

    Posté par  . Évalué à -1.

    essaye avec:

    for i in `ls`
    do
    ps2pdf $i.ps $i.pdf #je ne sais pas comment ça marche, mais ça dois s'approcher de ça ps2pdf
    done
    • [^] # Re: pourquoi for i in *.ps

      Posté par  . Évalué à 2.

      1/ le ls est inutile (un fork+exec en plus) for i in *.ps est suffisant
      2/ pour le ps2pdfil me semble qu'il faut lui mettre l'option -o.
  • # tous pour i et ir a toi

    Posté par  (site web personnel) . Évalué à 2.

    for i in signifie qu'à partir ce qui suit, séparé par le caractere "blanc", chaque element obtenu est assigné à i dans l'ordre.

    reste a manipuler $i.

    exemple de base :
    for treepwood in ceci est un exemple simple ; do
    echo "+-+ $treepwood -+-"
    done
  • # Sans filet

    Posté par  . Évalué à -1.

    for fichierps in `ls *.ps`
    do
    fichierpdf=`echo $fichierps | sed -e 's/\.ps$/\.pdf$/'`
    ps2pdf $fichierps $fichierpdf
    done
    • [^] # Presque

      Posté par  . Évalué à -1.

      for fichierps in `ls *.ps`
      do
      fichierpdf=`echo $fichierps | sed -e 's/\.ps$/\.pdf/'`
      ps2pdf $fichierps $fichierpdf
      done

      Un $ de trop ;)
      • [^] # Re: Presque

        Posté par  . Évalué à 2.

        et un ls de trop !
        • [^] # Re: Presque

          Posté par  (site web personnel) . Évalué à 2.

          Et oui, c'est la qu'on voit ceux qui ont appris à developper en shell et ceux qui ont appris en lisant les forums de ubuntu-fr.org ;)
  • # pas besoin de cible ;)

    Posté par  . Évalué à 2.

    Salut,
    (en supposant que tout les .ps sont dans le même endroit)

    for i in *.ps
    do
    ps2pdf $i
    done

    si la destination n'est pas précisée, ps2pdf prend pas défaut le nom du ficher ( sans l'extension) et rajoute .pdf .
  • # %%

    Posté par  . Évalué à 4.

    Voila une autre solution :

    for i in *.ps
    do
    ps2pdf $i ${i%%ps}pdf
    done
    • [^] # Merci

      Posté par  . Évalué à 1.

      j'en espérais pas tant ! :)
      je vais tester tout ça
      merci!
    • [^] # Re: %%

      Posté par  . Évalué à 2.

      Euh... Cette solution ne fonctionne pas si tu as la chaîne ps dans le nom du fichier.
      Par exemple, si un fichier s'appelle lispsux.ps, ta commande sortira un fichier lispsux.pdfpdf...
      Il faut inclure le '.' dans la commande de substitution :
      ps2pdf $i ${i%%.ps}.pdf
      Voilà....
      • [^] # Re: %%

        Posté par  . Évalué à 0.

        Ou alors enlever un %

        ps2pdf $i ${i%ps}pdf

        Mais même avec deux % celà marche, il ne faut just pas ajouter un "*" entre "p" et "s"
  • # Makefile

    Posté par  (site web personnel) . Évalué à 4.

    all: $($(wildcard *.ps):%.ps=%.pdf)

    %.pdf: %.ps ; ps2pdf $< $@

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.