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 :

Instruction for : ajouter 1 à chaque fois


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut Instruction for : ajouter 1 à chaque fois
    Bonjour,

    mes fichiers s'appellent

    • a-01.png
    • a-02.png
    • b-01.png
    • b-02.png
    • etc. jusqu'à 49


    Pour en faire un pdf je veux dans l'ordre a-01, b-01, a-02, b-02 etc.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    i=01
     
    # On fusionne a-XX avec b-XX pour obtenir XX.pdf, ou XX augmente de 1 à chaque fois.
    for file in *.png; do
    	convert *$i.png $i.pdf
    	i=$(($i+1))
    done
     
    # On fusionne tous les pdf obtenus
    pdftk $(ls *.pdf) cat output result.pdf
    J'obtiens bien 01.pdf, puis 2.pdf etc... Je pourrais ajouter 0 quand je redéfinir la variable i à la fin de la boucle:
    Seulement, ça fonctionne en-dessous de 10 mais au-delà, ça ne fonctionne plus...

    Help me...
    Comment je peux faire un script pour qu'il intercale a avec b, de 01 à 49 ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Voici une idée:
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ls *.png
    a-01.png  a-02.png  a-49.png  b-01.png  b-02.png  b-49.png
    $ for i in a-*.png;do convert *${i//[^0-9]}.png resultat${i//[^0-9]}.pdf;done
    $ ls resultat*
    resultat01.pdf  resultat02.pdf  resultat49.pdf

    On supprime tout ce qui n'est pas le numero.
    Et on refabrique les noms de fichiers à partir du résultat.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,
    une autre façon de faire (exemple des txt en png):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ls *.txt
    1-1000000.txt  arab.txt   before.txt  fichier.txt   file1.txt  file3.txt  fsed.txt  tmp.txt   zero.txt
    after.txt      arab2.txt  fic1.txt    fichier2.txt  file2.txt  file4.txt  so.txt    tmp2.txt
    $ ls *.png
    ls: cannot access *.png: No such file or directory
    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
    $ for i in *.txt; do echo convert $i $(basename $i .txt).png; done
    convert 1-1000000.txt 1-1000000.png
    convert after.txt after.png
    convert arab.txt arab.png
    convert arab2.txt arab2.png
    convert before.txt before.png
    convert fic1.txt fic1.png
    convert fichier.txt fichier.png
    convert fichier2.txt fichier2.png
    convert file1.txt file1.png
    convert file2.txt file2.png
    convert file3.txt file3.png
    convert file4.txt file4.png
    convert fsed.txt fsed.png
    convert so.txt so.png
    convert tmp.txt tmp.png
    convert tmp2.txt tmp2.png
    convert zero.txt zero.png
    suffit juste ici de retirer le echo

    PS : pas de ls inutile, un simple *.pdf est suffisant.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut
    Merci!

    En fait, j'essaye de comprendre le code. i signifie quoi, dans "for i in etc." ?

    Et le double slash? ${i//...

    Merci
    Celano

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Pour plus d'info: man bash. Toutes tes reponses sont dedans.

    'i' est une variable muette. Tu peux l'appeler comme tu veux.
    Le '/' supprime une fois.
    Le '//' supprime toutes les fois. (Ici il supprime tout ce qui n'est pas un chiffre)

  6. #6
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Pour afficher de 01 à 049

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i=0 ; while [ $i -lt 49 ] ; do let i=i+1 ; printf "%02d \n" $i  ; done

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 398
    Par défaut
    Merci beaucoup pour toutes ces informations précieuses.
    Celano

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/05/2006, 17h27
  2. le makefile refait tout à chaque fois?!
    Par jula dans le forum Systèmes de compilation
    Réponses: 2
    Dernier message: 25/04/2006, 17h08
  3. [Cookies] L'ID de session change à chaque fois ! :-(
    Par seb92500 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2006, 12h38
  4. [C#]Authentification qui échoue : a chaque fois "Login inco
    Par The_revival dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/04/2006, 22h36
  5. ShellExecuteEx ne s'execute pas à chaque fois??
    Par Gothico dans le forum MFC
    Réponses: 11
    Dernier message: 01/03/2005, 22h02

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