GNU/Linux >> Tutoriels Linux >  >> Linux

La commande 'ls -d' n'affiche pas les répertoires. Existe-t-il un moyen d'obtenir que 'ls' affiche uniquement les répertoires au lieu des fichiers et des répertoires?

Vos attentes sont basées sur DOS Think/Windows Think et sont erronées. Sur MS-DOS, Windows et 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 le /a option au dir La commande agit comme des filtres d'attributs lors de l'expansion des caractères génériques. dir développe les caractères génériques comme * , 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 énumérer 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 Linux, l'expansion des caractères génériques est effectuée par le shell et ne tient pas compte des autorisations. Lorsque, dans le répertoire racine, vous faites

ls *

qu'est-ce que le ls la 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 le -d /--directory l'option est désactiver ce qui se passe normalement ensuite . Ce qui se passe normalement ensuite est que ls regarde tour à tour chacun de ses arguments, voit qu'il s'agit de répertoires et décide d'énumérer leur contenu. Pour les arguments qui nomment des fichiers, il imprime simplement les informations du fichier lui-même. Avec le -d option, les répertoires sont traités comme des fichiers. Donc ls imprime les informations pour chacun des répertoires qui sont passés en arguments, comme il le ferait s'il s'agissait de fichiers.

Donc -d n'est pas une option "imprimer uniquement les répertoires". En fait, non seulement il n'y a pas une telle option; il ne peut pas y avoir une telle option. L'expansion des caractères génériques est effectuée par le shell et (dans un POSIX sh au moins) il n'y a aucun moyen de dire au shell de vérifier les bits d'autorisation et de type de fichier lorsqu'il développe * dans une liste de noms. Pour obtenir une liste des noms de répertoires seuls, il faut soit utiliser le find commande, comme expliqué par ztank1013 , ou pour utiliser l'astuce qu'un nom de chemin se terminant par une barre oblique implique l'entrée de répertoire . , comme expliqué par Jin . (Jin l'astuce de se termine par le ls commande recevant les arguments

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

car le motif */ correspond en fait à des chemins d'accès avec deux composants, le second étant vide, et n'est donc pas tout à fait faire ce qui était désiré. En particulier, il traitera les liens symboliques pointant vers des répertoires comme s'il s'agissait de répertoires.)

Le comportement de ls -d sans * est une simple extension de ce qui précède. Il suffit de savoir une chose de plus sur ls  :Lorsqu'il ne reçoit aucun argument, il suppose un argument par défaut de . . Maintenant sans le -d option, le comportement susmentionné conduit au contenu du répertoire nommé par . en cours d'énumération et les informations relatives à son contenu affichées. Avec le -d option, le répertoire . est traité comme s'il s'agissait d'un fichier, et ses propres informations sont affichées, plutôt que son contenu énuméré.


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


Essayez ceci

 find . -mindepth 1 -maxdepth 1 -type d

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


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Un moyen facile de masquer des fichiers et des répertoires sous Linux

  3. Trouvez les fichiers et répertoires les plus volumineux sous Linux

  4. Comment obtenir un nombre de fichiers dans un répertoire à l'aide de la ligne de commande ?

  5. Existe-t-il un moyen de modifier un identifiant de volume de fichiers .iso à partir de la ligne de commande ?

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Copier des fichiers et créer des répertoires cibles en même temps

Le moyen le plus rapide de compter les fichiers de manière récursive sous Linux

Un moyen facile de fusionner des fichiers avec la commande Cat

4 façons de transférer des fichiers et des répertoires sous Linux

Commande Stat :Afficher les attributs des fichiers et des répertoires