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 :

Afficher les lignes en colonnes


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 138
    Points : 65
    Points
    65
    Par défaut Afficher les lignes en colonnes
    Bonjour,

    j’essaie d'afficher les lignes en colonne avec " ls -1": ceci fonctionne en mode console
    mais lorsque je mets cette commande dans une variable, exemple: LS=$(ls -1) ou LS=`ls -1` et que je fais un echo $LS je n'ai pas d'affichage de colonne mais j'ai que des lignes !
    Quelqu'un aurait une idée ?

    Merci beaucoup

    PS: Bien sûr je me pose cette question car je vais mettre ça dans un script

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 398
    Points
    19 398
    Par défaut
    Bonjour,

    utilise des guillemets !
    echo "$LS"
    et puis,utiliser ls dans un script est rarement une bonne idée, privilégie l'usage du développement des chemins* si possible.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    hello,
    N_BAH vient encore de m'apprendre quelque chose , après avoir cherché sur le développement de chemin, voici :
    Développement des chemins
    Après le découpage en mots, à moins que l'option -f soit présente, bash recherche dans chaque mot les caractères *, ? et [. Si l'un d'eux apparaît, le mot est considéré comme un motif et remplacé par une liste, classée par ordre alphabétique, des noms de fichiers correspondant à ce motif.
    Peux tu préciser ton précédent post, j'avoue utiliser parfois ls dans des scripts ...

    merci d'avance,
    ben

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 398
    Points
    19 398
    Par défaut
    Je n'utilise jamais ls dans un script BASH.
    si j'ai besoin de renseignements sur des fichiers, j'utiliserai plutôt stat, dont je peux contrôler complètement l'affichage, ainsi point de cut, sed, awk
    si j'ai besoin de filtrer la liste, je peux utiliser les motifs génériques*, et les correspondances étendues* => grep
    si j'ai besoin de la liste des fichiers d'un répertoires, j'utiliserai un tableau.

    pour l'affichage en colonne : printf '%s\n' monRep/*
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    je me permets de répondre car c'est une problématique à laquelle je suis souvent confronté et j'aimerai faire ça le plus proprement possible (lister des fichiers générés et les traiter).

    si j'ai besoin de filtrer la liste, je peux utiliser les motifs génériques*, et les correspondances étendues* => grep
    tu fais référence ici au caractères de plage [], au jeton n'importe quelle chaine '*' et au jeton n'importe quel caractère '?' ?

    si j'ai besoin de la liste des fichiers d'un répertoires, j'utiliserai un tableau.
    Par exemple, j'ai une application qui tourne en crontab et qui va générer des fichiers résultats aux extension variées, disons .ext1, .ext2, .ext3

    Donc si j'ai besoin de traiter la liste des fichiers générés ie les .ext1, .ext2, .ext3.
    tu procéderais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    declare tab
    for i in *ext[123]
    do 
    tab+=( $i )
    done
     
    #traitement du tableau ?
    en quoi est ce mieux que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in $(ls *ext[123])
    do
    #traitement de $i
    done
    Peux tu donner un exemple de ta manière ?

    enfin pourrais tu donner un exemple de ta manière de procéder avec stat ?

    merci d'avance,
    ben

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 398
    Points
    19 398
    Par défaut
    tu fais référence ici au caractères de plage [], au jeton n'importe quelle chaine '*' et au jeton n'importe quel caractère '?' ?
    oui, ainsi que ce que permet l'option extglob.

    en quoi est ce mieux
    d'abord, essaie avec des noms de fichiers qui comportent des espaces
    ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    shopt -s nullglob
    mesFichiers=( *ext[1-3] )
    #Affichage
    (( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
    #Traitement
    for fichier in "${mesFichiers[@]}"
    do #traitement sur fichier
    done
    si je veux n'afficher que le nom et la date de dernière modification des fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stat -c'%n %y\n' "${mesFichiers[@]}"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre averti Avatar de FRUiT
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 83
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par ben.IT Voir le message
    en quoi est ce mieux que :
    Parce que !
    Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
    "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
    clean

  8. #8
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    merci de ta réponse,
    peux tu préciser le sens du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
    notamment le dièse après l'accolade, je n'ai jamais utilisé cette écriture ...
    merci,
    Ben

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par ben.IT Voir le message
    merci de ta réponse,
    peux tu préciser le sens du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
    notamment le dièse après l'accolade, je n'ai jamais utilisé cette écriture ...
    merci,
    Ben
    man bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #
        Correspond au nombre de paramètres positionnels, en base décimale.
    
    ${#paramètre}
        Est remplacé par la longueur, en caractères, de la valeur du paramètre. 
        Si le paramètre est * ou @, la valeur est le nombre de paramètres positionnels. 
        Si le paramètre est un nom de tableau indexé par * ou @, la valeur est le nombre
        d'éléments dans le tableau
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  10. #10
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    merci, pour vos super réponses.
    ton lien est super FRUiT :
    Why you shouldn't parse the output of ls(1)
    Je ne vois pas comment je pouvais espérer meilleur réponse à ma question.
    en résumé :
    NE PAS FAIRE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for f in $(ls); do
     ...
    done
    MAIS PLUTOT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for f in *; do
     ...
    done
    zipe31 merci à toi pour ton lien vers le man bash en français, je le garde sous le coude !

    Ce genre de discussion me permet de grappiller des connaissances en bash qui me sont très utiles, c'est vraiment super, merci à vous les gars (ou les filles) !


    à très bientôt,
    ben

Discussions similaires

  1. Ne pas afficher les lignes et les colonnes interne dans un tableau HTML
    Par Jinx_ dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/01/2010, 21h23
  2. [JTable] Ne pas afficher les entêtes de colonnes
    Par nicolas.pied dans le forum Composants
    Réponses: 2
    Dernier message: 27/01/2006, 11h22
  3. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 11h26
  4. [debutant]afficher les lignes?
    Par loveflower dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 26/11/2005, 14h43
  5. Afficher les lignes d'un fichier
    Par pepere73 dans le forum C++
    Réponses: 16
    Dernier message: 21/02/2005, 22h25

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