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 :

Boucle sur fichiers et le caractère espace


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 302
    Par défaut Boucle sur fichiers et le caractère espace
    Bonjour,

    Je cherche à faire une action sur tous les fichiers du répertoire "monRep".

    Le seul problème et que le nom des fichiers de ce répertoire peuvent contenir un ou plusieurs caractères espace.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ ls -1 monRep
    ...
    Copie de toto
    dummy
    pipo
    toto
    ...
    Par conséquent, quelque chose comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for fichier in $(ls monRep)
    do
        # faire une action, ici affichage
        echo $fichier
    done
    ne peut absolument pas convenir car un fichier nommé "Copie de toto" fournira à la boucle "for" les 3 entrées "Copie", "de" et "toto" !!!

    Comment faire ?

    Merci.

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Il faut jouer sur le séparateur de champs/d'instructions IFS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IFS=$'\n\t'
    for fichier in $(ls monRep)
    do
        # faire une action, ici affichage
        echo $fichier
    done
    unset IFS

  3. #3
    Membre éclairé Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 302
    Par défaut
    Maintenant ça marche bien pour ces fichiers "Copie de toto"

    Mais ça ne marche plus pour les autres

    En fait, ça me bouffe certains caracères !?

  4. #4
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par domiq44
    Mais ça ne marche plus pour les autres

    En fait, ça me bouffe certains caracères !?
    Saurais-tu être plus précis ?
    Habituellement, cela ne pose aucun problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IFS=$'\n\t'
    for fichier in $(ls -1)
      do 
        echo "[$fichier]"
    done
    unset IFS
    dans mon répertoire de test, me fournit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [img_1.jpg]
    [img 2.jpg]
    [img_3.jpg]
    [img 4.jpg]
    [img_5.jpg]
    Ce qui correspond parfaitement au contenu.

  5. #5
    Membre éclairé Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 302
    Par défaut
    Je pense que cela doit venir de mon système de m...e : AIX !!!

    Moi j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ ls -1
    img 2.jpg
    img 4.jpg
    img_1.jpg
    img_3.jpg
    img_5.jpg
    test.sh
    $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ cat test.sh
    IFS=$'\n\t'
    for fichier in $(ls -1)
      do
        echo "[$fichier]"
    done
    unset IFS
    $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ test.sh
    [img 2.jpg
    img 4.jpg
    img_1.jpg
    img_3.jpg
    img_5.jpg
    ]
    [es]
    [.sh]
    $
    Je ne comprends pas !!!

  6. #6
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par domiq44
    Je pense que cela doit venir de mon système de m...e : AIX !!!
    Mais c'est très bien, AIX ... parfois un peu délicat à l'emploi, mais très bien quand même (surtout les babasses qui le font tourner ).

    Effectivement, je vois le problème.
    Il vient de l'affectation dans IFS.
    AIX interprète le \t et le \n et met alors t et n dans la liste des séparateurs, virant du même coup l'espace (c'est ce qu'on veut), mais aussi la tabulation et le retour à la ligne.
    Du coup, tous les t et n sont considérés comme des séparateurs, donc bouffés.

    La syntaxe que j'ai utilisé (IFS=$'\t\n') est une syntaxe BASH.
    Il doit exister un équivalent sous AIX qui permette d'insérer ces deux caractères de contrôle dans la variable d'environnement.

    Bon courage.

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

Discussions similaires

  1. [XL-2007] Boucle sur fichier Word et remplacement d'un mot
    Par kinansoag dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2014, 16h04
  2. [WD15E] Boucle sur fichiers Word et remplacement d'un mot
    Par kinansoag dans le forum WinDev
    Réponses: 0
    Dernier message: 13/03/2014, 19h38
  3. programme écriture en boucle sur fichier excel
    Par varik dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/04/2013, 18h09
  4. [bash] Boucle sur des noms de fichiers à espaces
    Par Le Furet dans le forum Linux
    Réponses: 8
    Dernier message: 16/12/2009, 07h59
  5. Boucle sur fichier texte, tester des liens.
    Par Traquerdst dans le forum Langage
    Réponses: 13
    Dernier message: 04/11/2008, 18h48

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