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 :

commande ls et *


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Femme Profil pro
    amateur
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 22
    Points
    22
    Par défaut commande ls et *
    Bonjour
    Je ne saisis pas les subtilités de la commande ls.

    Qu'est ce qui fait que ls *.*

    n'affiche pas les fichiers cachés en .xxxx

    merci d'avance de vos éclaircissements.

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

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

    parce que c'est le shell qui réalise le développement.
    en bash, tu peux aussi activer l'option dotglob avec shopt.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    bon là... j'ai pas le choix ... RTFM (pour toute question sur une commande "basique" du système c'est le reflexe à avoir pour cette fois ... on dira que tu savais pas...

    ls -a

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    en bash, tu peux aussi activer l'option dotglob avec shopt.
    je me reprend pour préciser qu'alors ls est inutile !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre à l'essai
    Femme Profil pro
    amateur
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 22
    Points
    22
    Par défaut ls et * logique du fonctionnement
    En fait, si, j'ai bien commencé par lire le manuel.
    Mais c'est pas toujours évident de comprendre ce qu'il dit. Il y a des moments où on le comprend...que lorsqu'on a déjà compris :-)

    Je précise ce qui me chagrine et dont je ne comprends pas la logique (et la réponse est sûrement que je ne regarde pas au bon endroit sur le man !)

    Dans un répertoire, j'ai les fichiers f, fa, fb, f.c, .ghe

    ls f* trouve f et trouve f.c
    j'en déduisais que * peut désigner une chaîne vide ou une chaîne commençant par le symbole .

    mais ceci semble être contredit par
    ls *.* ou par ls * qui ne retournent pas le fichier .ghe

    A quel niveau mon raisonnement est à corriger ?

    merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    la norme POSIX définit ce comportement :
    si un nom de fichier commence par un point ('.'), le point doit être utilisé en tant que premier caractère du motif[...]
    le point ne pourra être remplacé par un astérisque, un point d'interrogation, ou une plage de non-correspondance[...]
    cf. Patterns Used for Filename Expansion

    et, je le redis, ce n'est pas le fait de ls, mais du shell.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 103
    Points
    43 103
    Par défaut
    ls *.*, c'est le réflexe Windows ...
    Je fais pas mal de linux en ce moment, et je me retrouve à taper : ls dans la ligne de commande windows
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Membre à l'essai
    Femme Profil pro
    amateur
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : amateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    la norme POSIX définit ce comportement : cf. Patterns Used for Filename Expansion

    et, je le redis, ce n'est pas le fait de ls, mais du shell.

    merci, voilà qui m'éclaire.

    Je voyais un contre-exemple à mon interprétation là où il fallait plutôt voir une exception utile pour les fichiers .xxx

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    J'en profite pour préciser que « *.* » est un motif typiquement DOS (et Windows par extension), parce que DOS utilisait le format 8.3, dans laquelle l'extension du nom de fichier était un champ à part entière. Si l'on saisit cela sous Unix, on n'obtiendra que les fichiers dont le nom contient au moins un point (et pas au début, bien sûr).

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    pardon, mais j'ai l'impression que personne ne répond à la question.

    Citation Envoyé par nthl.roche Voir le message
    Qu'est ce qui fait que ls *.*

    n'affiche pas les fichiers cachés en .xxxx
    La réponse est dans la question: car ils sont cachés

    A quel niveau mon raisonnement est à corriger ?
    L'erreur est que la convention est de dire que les fichiers qui commencent par un point son cachés. Sous windows, c'est une propriété supplémentaire du fichier; sous linux, c'est un format de nom qui provoque le caractère caché.

    Un problème de développement de commande shell qui n'arrive pas si tu utilises "find" plutôt que "ls":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ find -maxdepth 1 -name '.*'
    .
    ./.vide.txt
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    La réponse est dans la question: car ils sont cachés
    Oui mais justement, ce n'est pas sa question. Il sait très bien qu'il s'agit de fichiers cachés. Mais comme on peut explicitement les sélectionner avec « .* » , il se demandait pourquoi le motif « *.* » ne les sélectionne pas également, et d'une manière générale, qu'est-ce qui fait que « * » ne les sélectionne pas comme des fichiers ordinaires, fussent-ils cachés. Ça a du sens parce qu'on aurait pu penser qu'un « ls » seul, sans motif explicite, aurait choisi de faire lui-même cette distinction.

    En ce sens, la réponse de N_baH est la meilleure puisqu'elle met en évidence que le comportement à adopter a été normalisé et que cette norme décrit en détail l'attitude à adopter.

    La justification est que ces fichiers étant cachés, l'utilisateur peut en ignorer l'existence (ils sont même faits pour) et que dans ce cas, les fichiers cachés ne doivent pas être impliqués à son insu dans un traitement ordinaire.

    Un problème de développement de commande shell qui n'arrive pas si tu utilises "find" plutôt que "ls":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ find -maxdepth 1 -name '.*'
    C'est le mauvais exemple : tu as écrit « .* » dans ton motif de recherche. Ce qui donnera le même résultat qu'un « ls .* » ou même un « echo .* ».

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

Discussions similaires

  1. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. [Kylix] Commandes linux ss kylix
    Par csnickos dans le forum EDI
    Réponses: 3
    Dernier message: 15/09/2002, 20h24
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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