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

Linux Discussion :

probleme de boucle sur l'execution d'une commande


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut probleme de boucle sur l'execution d'une commande
    Bonjour à toute la communauté,

    Voilà, je reviens pour que quelqu'un puisse m'aider à comprendre.

    voici un bout de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for fichier in $(ls *.pas)
     
         do
              mv *.pas pas/
              echo le fichier $fichier à été déplacé dans le répertoire pas
         done

    lorsque j'exécute mon script tout se passe bien dans la boucle pour le premier passage mais si par exemple il y avait plusieurs fichiers ayant l'extension .pas, il va me mettre le message suivant : "mv: ne peut pas évaluer '*.pas': aucun fichier ou répertoire de ce type ", et pourtant il va quand même me déplacer le fichier suivant qu'il va trouver et me le ranger dans le répertoire approprié .pas.
    Je dois reconnaitre que je bute. Je remerci par avance ceux qui m'aideront à comprendre et à avancer.

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    A chaque itération (pour chaque fichier en .pas présent) tu demandes à ce que TOUS les fichiers d'extension ".pas" soient déplacés dans le répertoire "pas" : mv *.pas pas.

    A la deuxième itération, forcément, il n'y a plus de fichier en .pas et tu as le message que tu indiques. Et contrairement à ce que tu écris, le script NE déplace PAS le deuxième (troisième, quatrième, etc...) fichier : c'est déjà fait !

    (par contre je ne comprends pas le " ... in $(ls *.pas)" : j'aurais plutôt écrit "for file in *.pas")

    Et pour finir, à part le côté didactique, ton script ne fait (hors problème évoqué ici) rien d'autre que ce que ferait un "mv *.pas pas"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    merci de t'être intéressé à mon problème plxpy.
    Tout d'abord, pour te répondre, en fait , je dois faire un script pour retrouver des fichiers ayant certaine extension dans le répertoire courant. si le répertoire n'existe pas, il sera créé. jusque là pas de soucis. une fois listé, les fichiers seront déplacés, d'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fichier in $(ls *.pas)
    et cela sera donc stipulé que chaque fichier à été déplace dans le répertoire
    d'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo le fichier $fichier à été déplacé dans le répertoire pas
    je ne sais pas si tu vois ce que je veux exactement?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    en fait je veux traiter chaque fichier trouvé un par un et les ranger

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Qaund tu dis "si le répertoire n'existe pas", tu entends répertoire de nom l'extension que tu cherches, c'est à dire "pas" ?


    Dans ce cas, je ferais un truc comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ext=$1
    [ ! -d $ext ] && mkdir $ext
    for file in *.$ext
    do
            mv $file $ext
            echo le fichier $file a ete deplace dans $ext
    done

    et tu passes l'extension traitée comme argument du script

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    oui, il s'agit bien du nom du répertoire correspondant à l'extension.

    Ce que j'ai fait pour voire si le répertoire existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if test -d $pas
    then
             echo le répertoire pas est présent
    else
              echo le répertoire pas est absent et va donc etre créé
              mkdir pas
    fi
    Ensuite je passais par ma boucle for pour déplacer chaque fichier.

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Sans affichage à l'écran, c'est bien ce que fait

    [ ! -d $ext ] && mkdir $ext



    Par contre, est-ce une coquille et fais-tu bien la différence entre "pas" et $pas ? Dans ton dernier exemple, tu testes l'existence d'un répertoire dont le nom est dans la VARIABLE pas (et qui peut être n'importe quoi)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    oui, tu as raison, je ne discernais pas la différence. Je commence à comprendre quelque petite chose, surtout avec ton code qui par ailleurs, est très clair et bref.

    Je vais continuer de bucher et de faire quelque chose de correcte...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    plxpy tu viens de me faire douter avec ta question, peux tu me dire si je me trompe?
    Mon code :
    Ne veut il pas dire : si le test du repertoire pas

    je crois qu'il faut que je me retourne dans les base là car je m'y perds...

  10. #10
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    qui peut se contracter en
    teste s'il existe un répertoire dont le nom est LA VALEUR de la variable pas ($pas)

    Si, avant, tu as un "pas=toto", ça testera l'existence d'un répertoire de nom toto

    Si tu veux tester l'existence d'un répertoire de NOM "pas", tu fais
    ou

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bono7 Voir le message
    une fois listé, les fichiers seront déplacés, d'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for fichier in $(ls *.pas)
    Attention, gros danger. Si un des fichiers a un espace dans son nom, le for le traitera en 2 itérations et aucune des deux ne fonctionnera.

    De façon plus générale, le for var in $(commande) est à envisager avec prudence car faut penser au cas où une des lignes de la commande contient un espace.

    Mieux vaut remplacer cette syntaxe for par "commande |while read var" car le read se cale sur le <return> de la fin de ligne. Donc ici, ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls *.pas |while read fic
    do
        mv "$fic" repertoire_de_destination
    done
    Citation Envoyé par plxpy Voir le message
    Si tu veux tester l'existence d'un répertoire de NOM "pas", tu fais
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pas=pas
    if test -d $pas

  12. #12
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pas=pas
    if test -d $pas

    Sve@r, c'est tout à fait exact mais j'ai peur que ça tourne à un sketch de Raymond Devos et au jeu de mots et, dans ce cas, je te laisse expliquer les subtilités des noms de variables et de leur contenu : le contenu de pas c'est "pas" et non pas pas, pas le premier, le deuxième

    Trêve de plaisanterie, je pense que, là, bono7 faisait bien la confusion entre les deux.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    oui, tout à fait, je faisais bien la confusion et j'ai testé tout ce que vous m'avez dit ainsi que les problèmes soulevés. Encore un grand merci, grâce à vous, j'ai pu avancer...

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 24/11/2014, 10h02
  2. Souci sur l'execution d'une requete MàJ.
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 14/03/2007, 17h52
  3. Probleme sur l'execution d'une Tâche LOT DTS
    Par SILO dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/08/2006, 16h04
  4. [Pl/pgSQL] Erreur sur l'execution d'une fonction.
    Par Floréal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/09/2005, 00h48
  5. [System][EXEC] Probleme d'execution avec une commande parametrée.
    Par chicorico dans le forum Général Java
    Réponses: 15
    Dernier message: 20/05/2005, 15h07

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