46 votes

La commande 'ls -d' n'affiche pas les répertoires. Existe-t-il un moyen de faire en sorte que la commande 'ls' n'affiche que les répertoires au lieu des fichiers et des répertoires ?

Existe-t-il un moyen d'obtenir ls pour n'afficher que les répertoires au lieu des fichiers et des répertoires ?

Extrait de la page de manuel :

   -d, --directory
          list directory entries instead of contents, and do not  derefer
          ence symbolic links

Ainsi, si je le tape à l'adresse / Je m'attends à ne voir que des répertoires. Au lieu de cela, il affiche "."

$ cd /
$ ls -d
.

Je m'attendais à ce que ls -d pour me montrer ceci :

$ ls -d
bin    data  home        opt    sbin  sys      var
boot   dev   lib         media  proc  selinux  tmp
cdrom  etc   lost+found  mnt    root  srv      usr

Existe-t-il un moyen d'obtenir ls pour n'afficher que les répertoires au lieu des fichiers et des répertoires ?

51voto

JdeBP Points 25711

Vos attentes sont basées sur DOS Think/Windows Think et sont erronées. Sous MS-DOS, Windows et même quelques autres systèmes d'exploitation IBM/Microsoft, l'expansion des caractères génériques est effectuée par la commande elle-même, et des choses comme la commande /a à l'option dir agissent comme des filtres d'attributs lors de l'expansion des caractères génériques. dir développe les caractères génériques tels que * que l'interpréteur de commandes lui transmet tel quel, et si /a est spécifié, il applique les filtres appropriés à ce qui est renvoyé. (Sur certains systèmes d'exploitation, les filtres d'attributs peuvent être donnés à l'appel système pour l'énumération d'un répertoire et le noyau du système d'exploitation, ou ses pilotes de système de fichiers, les applique lui-même).

Sur Unices et sur Linux, l'expansion des caractères génériques est effectuée par le Shell, et ne tient pas compte des permissions. Lorsque, dans le répertoire racine, vous faites

ls \*

ce que le ls commande elle-même reçoit du Shell est (quelque chose comme)

ls bin home opt var boot dev tmp etc lost+found root usr

Qu'est-ce que la -d / --directory L'option désactiver ce qui se passe normalement ensuite . Ce qui se passe normalement ensuite, c'est que ls examine chacun de ses arguments à tour de rôle, constate qu'il s'agit de répertoires et décide d'énumérer leur contenu. Pour les arguments qui nomment des fichiers, il se contente d'imprimer les informations relatives au fichier lui-même. Avec l'option -d les répertoires sont traités comme des fichiers. Ainsi, l'option ls affiche les informations relatives à chacun des répertoires qui lui sont transmis en tant qu'arguments, comme il le ferait s'il s'agissait de fichiers.

Así que -d n'est pas une option "imprimer seulement les répertoires". En fait, non seulement cette option n'existe pas, mais en plus il y a ne peut être une telle option. L'expansion des caractères génériques est effectuée par le Shell, et (dans un système POSIX sh au moins), il n'y a aucun moyen de dire au Shell de vérifier les bits de permission et de type de fichier lorsqu'il développe le fichier. * dans une liste de noms. Pour obtenir une liste de noms de répertoires seuls, il faut soit utiliser la commande find comme l'explique ztank1013 ou d'utiliser l'astuce selon laquelle un nom de chemin se terminant par une barre oblique implique l'entrée du répertoire . , comme l'explique Jin . ( Jin Le tour de passe-passe de l'auteur de l'article se termine par l'obtention de l'autorisation d'exercer une activité professionnelle. ls en recevant les arguments

ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/

parce que le modèle */ correspond en fait à des noms de chemin à deux composants, le second étant vide, et n'est donc pas tout à fait faire ce que l'on souhaitait. En particulier, il traitera les liens symboliques pointant vers des répertoires comme s'il s'agissait de répertoires).

Le comportement des ls -d sans * est une extension simple de ce qui précède. Il suffit de savoir une chose de plus sur ls : Lorsqu'il n'a pas d'arguments, il prend un argument par défaut de . . Maintenant sans les -d le comportement susmentionné conduit à l'affichage du contenu du répertoire nommé par l'option . est énuméré et les informations relatives à son contenu sont affichées. Avec les -d l'option, le répertoire . est traité comme s'il s'agissait d'un fichier, et ses propres informations sont affichées, plutôt que d'énumérer son contenu.

30voto

Jin Points 4253

Vous pouvez utiliser ls -d */ o ls -d .*/ pour les répertoires cachés.

13voto

ztank1013 Points 471

Essayez ceci

 find . -mindepth 1 -maxdepth 1 -type d

pour obtenir uniquement les répertoires situés sous votre emplacement actuel.

5voto

Joel Mueller Points 14985

Vous pourriez aussi aimer

tree -d 

qui répertorie soigneusement tous les répertoires et sous-répertoires avec une représentation graphique de l'arborescence.

5voto

Adnan Bhatti Points 151

Si vous voulez voir les répertoires uniquement avec des détails comme ls -l (ELL), vous pouvez utiliser l'option ci-dessous :

find -maxdepth 1 -type d -ls;

Ci-dessus, vous n'obtiendrez que les détails que vous obtenez avec l'option -l option.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X