Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/03/2013, à 18:20

Archonic

[Résolu] Commande "ls", option "-d"

Bonjour à tous,

Au fil de mes recherches sur le net, je m'apperçois que ma question est assez commune.  Cependant, faute d'avoir pu trouver réponse satisfaisante, je me permets de vous interroger une fois encore - peut-être un peu différemment des autres sujets disponibles ici mais surtout ailleurs.

"ls -d" revient régulièrement sur les forums lorsqu'un utilisateur cherche à établir la liste des sous-répertoires contenus dans le dossier courant.  On trouve donc ceci : "ls -d */"

Ca semble effectivement fonctionner.  Par contre, je ne comprends pas - comment - ça fonctionne.  D'où ma présence ici.

Le manuel me dit ceci au sujet de l'option "-d" : "list directory entries instead of contents, and do not dereference symbolic links"

Comment suis-je supposé comprendre/interpréter cette phrase?

Voici comment je la traduis : "Liste les entrées du répertoire à la place de son contenu, et n'enlève pas les références aux liens symboliques".  Et bien ça ... ça me semble aussi flou en français qu'en anglais!

Que signifient "les entrées du répertoire"?  Et "ne pas enlever les références aux liens symboliques"?

Point 1:
Je comprends par là que l'option "-d" va m'afficher les répertoires en amond du répertoire courant ; donc celui-ci serait un sous-répertoire de ce qui va être affiché ... Ce qui ne me semble pas être correct du tout.

Point 2:
Quant à "ne pas envelever les références" aux liens symboliques, je comprends que les liens symboliques sont affichés malgré tout.
Ce qui semblerait donc signifier que "ls -d */" me retournerait également les liens symboliques.

Evidemment, ce n'est pas ce qui se passe, je l'observe en essayant différentes commandes.  Donc, oui, je suis dans l'erreur.
Mais comment ça marche exactement?

En vous adressant un grand merci, bien entendu smile

Dernière modification par Archonic (Le 29/03/2013, à 20:15)

Hors ligne

#2 Le 29/03/2013, à 18:36

darunia_goron

Re : [Résolu] Commande "ls", option "-d"

http://pwet.fr/man/linux/commandes/ls

Et « do not dereference symbolic links » veut dire «ne pas suivre les liens symbolique», en gros, lorsqu'il y a un lien symbolique vers un dossier, il l'ignore.

Hors ligne

#3 Le 29/03/2013, à 18:53

Archonic

Re : [Résolu] Commande "ls", option "-d"

Merci pour le lien, ça semble plus clair au premier abord : "Afficher les répertoires avec la même présentation que les fichiers, sans lister leur contenu."

Et pourtant : "avec la même présentation que les fichiers" ...

Pour l'option "-l" classique j'obtiens ceci:

sebastien@louise LinuxEssentials$ ls -l
total 28
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dira
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirb
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirc
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dird
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dire
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirf
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirg
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 17:52 test1.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:22 test2.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:23 test3.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:24 test4.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test5.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test6.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test7.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test8.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:26 test9.txt

Alors que "-d" ne retourne tout simplement "rien" (juste ".", soit le répertoire courant):

sebastien@louise LinuxEssentials$ ls -ld
drwxrwxr-x. 9 sebastien sebastien 4096 Mar 29 18:45 .

Sauf si j'y ajoute "*":

sebastien@louise LinuxEssentials$ ls -ld *
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dira
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirb
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirc
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dird
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dire
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirf
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirg
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 17:52 test1.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:22 test2.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:23 test3.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:24 test4.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test5.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test6.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test7.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:25 test8.txt
-rw-rw-r--. 1 sebastien sebastien    0 Mar 29 18:26 test9.txt

Ce qui revient à la même chose que "-l" tout seul.

Et, sans surprise (mais également sans que je parvienne à comprendre) "-d */" fonctionne comme attendu:

sebastien@louise LinuxEssentials$ ls -ld */
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dira/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirb/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirc/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dird/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dire/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirf/
drwxrwxr-x. 2 sebastien sebastien 4096 Mar 29 18:45 dirg/

Comment cela se fait-il?

Encore merci.

Hors ligne

#4 Le 29/03/2013, à 19:05

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

Salut,

Ce qui revient à la même chose que "-l" tout seul.

"ls -ld *" n'est pas la même chose que "ls -l *". Tu as dû te tromper quelque part lorsque tu es arrivé à cette conclusion...

sebastien@amaretto:~$ mkdir toto
sebastien@amaretto:~$ cd toto
sebastien@amaretto:~/toto$ mkdir dir1
sebastien@amaretto:~/toto$ mkdir dir2
sebastien@amaretto:~/toto$ touch file1
sebastien@amaretto:~/toto$ touch file2
sebastien@amaretto:~/toto$ touch dir1/file3
sebastien@amaretto:~/toto$ touch dir2/file4
sebastien@amaretto:~/toto$ touch dir2/file5
sebastien@amaretto:~/toto$ ls -l *
-rw-rw-r-- 1 sebastien sebastien    0 mars  29 19:04 file1
-rw-rw-r-- 1 sebastien sebastien    0 mars  29 19:04 file2

dir1:
total 0
-rw-rw-r-- 1 sebastien sebastien 0 mars  29 19:04 file3

dir2:
total 0
-rw-rw-r-- 1 sebastien sebastien 0 mars  29 19:04 file4
-rw-rw-r-- 1 sebastien sebastien 0 mars  29 19:04 file5
sebastien@amaretto:~/toto$ ls -ld *
drwxrwxr-x 2 sebastien sebastien 4096 mars  29 19:04 dir1
drwxrwxr-x 2 sebastien sebastien 4096 mars  29 19:04 dir2
-rw-rw-r-- 1 sebastien sebastien    0 mars  29 19:04 file1
-rw-rw-r-- 1 sebastien sebastien    0 mars  29 19:04 file2

Avec "-d", quand tu pointes vers un répertoires tu obtiens le répertoire lui-même et non son contenu.

donc :
- avec ls -ld */ tu obtiens les répertoires uniquement
- avec ls -l */ tu obtiens le contenu des répertoires
- avec ls -ld * tu obtiens les fichiers et les répertoires du répertoire courant
- avec ls -l * tu obtiens les fichiers du répertoire courant et le contenu des répertoires
- avec ls -ld tu obtiens le répertoire courant
- avec ls -l tu obtiens le contenu du répertoire courant

Dernière modification par tiramiseb (Le 29/03/2013, à 19:08)

Hors ligne

#5 Le 29/03/2013, à 19:17

Archonic

Re : [Résolu] Commande "ls", option "-d"

Bonjour,

tiramiseb a écrit :

"ls -ld *" n'est pas la même chose que "ls -l *". Tu as dû te tromper quelque part lorsque tu es arrivé à cette conclusion...

Je voulais dire que j'obtenais la même chose que "ls -l" et non la mêmechose que "ls -l *"

tiramiseb a écrit :

Avec "-d", quand tu pointes vers un répertoires tu obtiens le répertoire lui-même et non son contenu.

Ah, ça ça me plait!  Ca commence à avoir du sens pour moi wink

Avec "ls -d ..." :
- (rien) je n'obtiens donc que le répertoire courant
- "*/" fait référence aux fichiers qui terminent par "/", soit les répertoires, contenus dans le répertoire courant.  Et "ls" est appliqué sur chacun d'eux ; pour cette raison, j'obtiens la liste de tous les sous-répertoires.  Ce qui reviendrai, en fait, à faire "-d (rien)" sur chacun de ces sous-répertoires

Mais avec "ls -l ..." :
- (rien) fait référence au répertoire courant et j'obtiens donc une liste de tous les fichiers et répertoire.
- "*", j'applique "ls -l" à tous les fichiers contenus dans le répertoire courant ; et c'est pour ça que j'obtiens le contenu de tous les répertoires.

Est-ce bien celà?  J'ai le sentiment que "oui" mais je préfère en être sûr avant d'étudier ça tel quel smile

Hors ligne

#6 Le 29/03/2013, à 19:35

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

Le raisonnement est bon.

Seule remarque :

- "*/" fait référence aux fichiers qui terminent par "/",

Ce ne sont pas "les fichiers qui terminent par /" mais "les fichiers pour lesquels on peut "approfondir" l'arborescence" (donc les répertoires)

Hors ligne

#7 Le 29/03/2013, à 19:53

Archonic

Re : [Résolu] Commande "ls", option "-d"

Merci pour tout smile

tiramiseb a écrit :

- avec ls -ld * tu obtiens les fichiers et les répertoires du répertoire courant

Cette subtilité m'échappe encore.

Si "-d" fait référence au répertoire, et non aux fichiers qu'il contient, pourquoi "ls -ld *" retourne également les fichiers?

Est-ce parce que le système traite répertoires et fichiers-ordinaires comme des fichiers.  Lorsqu'on utilise "*", il traite donc un fichier ordinaire comme s'il s'agissait d'un répertoire?

C'est obscure.

Dernière modification par Archonic (Le 29/03/2013, à 19:54)

Hors ligne

#8 Le 29/03/2013, à 20:00

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

Je pense que ce qui t'échappe est la chose suivante :

Ce n'est pas la commande "ls" qui interprète le "*", c'et le shell dans lequel tu exécutes la commande "ls".

Par conséquent, dans un répertoire qui contient deux fichiers "file1" et "file2" et un répertoire "dir1", bash remplace "*" par "dir1 file1 file2" avant d'exécuter la commande.

Par conséquent, lorsque tu tapes "ls -d *", en réalité la commande exécutée est "ls -d dir1 file1 file2".

Tu peux le vérifier en échappant l'astérisque, avec l'une des deux syntaxes suivantes :

sebastien@amaretto:~$ ls '*'
ls: impossible d'accéder à *: Aucun fichier ou dossier de ce type
sebastien@amaretto:~$ ls \*
ls: impossible d'accéder à *: Aucun fichier ou dossier de ce type


Du coup, "ls -ld *" ne fait pas référence au répertoire courant, mais à la liste des fichiers et répertoires qui sont contenus dans le répertoire courant.


Par ailleurs, "ls -d" sur un fichier (qui n'est pas un répertoire) est identique à "ls" sur ce même fichier : l'argument "-d" ne change le comportement de "ls" que sur les répertoires, cela ne veut pas dire que lorsque l'on utilise "-d" il ignore tout ce qui n'est pas un répertoire.
(c'est d'ailleurs peut-être ce dernier point qui te chiffonne plutôt).

Dernière modification par tiramiseb (Le 29/03/2013, à 20:03)

Hors ligne

#9 Le 29/03/2013, à 20:04

Archonic

Re : [Résolu] Commande "ls", option "-d"

tiramiseb a écrit :

Par conséquent, lorsque tu tapes "ls -d *", en réalité la commande exécutée est "ls -d dir1 file1 file2".

Ca, j'ai bien compris.
Mais c'est ci-dessous qui est moins clair pour moi.

tiramiseb a écrit :

Avec "-d", quand tu pointes vers un répertoires tu obtiens le répertoire lui-même et non son contenu.

Si j'obtiens le répertoire et non son contenu : "ls -d dir1" me retourne "dir1", donc ok.
Mais quid de "ls -d file1" puisque "file1" n'est pas un répertoire?

Hors ligne

#10 Le 29/03/2013, à 20:06

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

Mais quid de "ls -d file1" puisque "file1" n'est pas un répertoire?

Là c'est mon dernier ajout à ma réponse (que j'ai peut-être fait après que tu commences ta réponse - c'est le gros problème de l'édition des messages après publication big_smile) qui y répond :

"ls -d" sur un fichier (qui n'est pas un répertoire) est identique à "ls" sur ce même fichier : l'argument "-d" ne change le comportement de "ls" que sur les répertoires, cela ne veut pas dire que lorsque l'on utilise "-d" il ignore tout ce qui n'est pas un répertoire.

Dernière modification par tiramiseb (Le 29/03/2013, à 20:07)

Hors ligne

#11 Le 29/03/2013, à 20:07

Archonic

Re : [Résolu] Commande "ls", option "-d"

tiramiseb a écrit :

Par ailleurs, "ls -d" sur un fichier (qui n'est pas un répertoire) est identique à "ls" sur ce même fichier : l'argument "-d" ne change le comportement de "ls" que sur les répertoires, cela ne veut pas dire que lorsque l'on utilise "-d" il ignore tout ce qui n'est pas un répertoire.
(c'est d'ailleurs peut-être ce dernier point qui te chiffonne plutôt).

Mon message à croisé ton édition smile

Mais oui, c'est ça qui me pose problème.

Si je vulgarise, l'option "-d" n'est prise en compte que lorsqu'elle est appliquée à un répertoire.  Ca me semble étrange.

Hors ligne

#12 Le 29/03/2013, à 20:10

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

l'option "-d" n'est prise en compte que lorsqu'elle est appliquée à un répertoire.  Ca me semble étrange.

Moi ce qui me semblerait étrange, c'est de taper "ls -ld *" et de n'avoir que 3 retours alors que je sais avoir 3561 fichiers dans un répertoire... Le rôle de ls c'est de "lister les informations de tous les fichiers donnés en argument". Donc je m'attend à avoir au moins une ligne pour chaque fichier concerné.

L'option -d est bien sûr prise en compte lorsque l'on l'applique à un fichier. Mais vu qu'un fichier ne peut pas contenir d'autres fichiers, alors le comportement par défaut n'est pas modifié. Sinon, que t'attendrais-tu à avoir en faisant "ls -d file1" ?

Dernière modification par tiramiseb (Le 29/03/2013, à 20:11)

Hors ligne

#13 Le 29/03/2013, à 20:14

Archonic

Re : [Résolu] Commande "ls", option "-d"

Oui, en fait "list directory entries instead of contents" doit être compris comme "Liste les entrées de type répertoire à la place des fichiers qu'ils contiennent".

Mais c'est vrai, qu'appliqué à un fichier, ça n'a plus de sens et "ls" doit donc afficher les "choses qui ne sont pas des répertoires" malgré tout.

Bouuuuh!  Si je n'arrive pas à m'endormir paisiblement ce soir c'est que je suis malade! wink

Encore merci pour toutes ces précieux et intéressants échanges.

Hors ligne

#14 Le 29/03/2013, à 20:23

tiramiseb

Re : [Résolu] Commande "ls", option "-d"

Oui, en fait "list directory entries instead of contents" doit être compris comme "Liste les entrées de type répertoire à la place des fichiers qu'ils contiennent".

Je n'avais pas réussi à le formuler correctement ; tu as trouvé une formulation qui explique bien la chose smile

Hors ligne