#1 Le 29/03/2013, à 19: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
Dernière modification par Archonic (Le 29/03/2013, à 21:15)
Hors ligne
#2 Le 29/03/2013, à 19: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, à 19: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, à 20: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, à 20:08)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 29/03/2013, à 20:17
- Archonic
Re : [Résolu] Commande "ls", option "-d"
Bonjour,
"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 *"
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
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
Hors ligne
#6 Le 29/03/2013, à 20: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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 29/03/2013, à 20:53
- Archonic
Re : [Résolu] Commande "ls", option "-d"
Merci pour tout
- 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, à 20:54)
Hors ligne
#8 Le 29/03/2013, à 21: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, à 21:03)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 29/03/2013, à 21:04
- Archonic
Re : [Résolu] Commande "ls", option "-d"
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.
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, à 21: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 ) 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, à 21:07)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#11 Le 29/03/2013, à 21:07
- Archonic
Re : [Résolu] Commande "ls", option "-d"
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
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, à 21: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, à 21:11)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 29/03/2013, à 21: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!
Encore merci pour toutes ces précieux et intéressants échanges.
Hors ligne
#14 Le 29/03/2013, à 21: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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne