Y at-il une option avec la commande 'ls' que je ne voie que les répertoires?

74

Parfois, je n'ai besoin de vérifier que les répertoires, pas les fichiers. Y at-il une option avec la commande ls? Ou y a-t-il une utilité pour le faire?

EDIT : J'utilise Mac OS X et ls -dme donne .même si j'ai des répertoires.

Prosseek
la source
4
Quelqu'un peut-il expliquer pourquoi ls -ddonne seulement .et pourquoi */faut-il l'ajouter à la fin pour que cela fonctionne?
cwd
3
@cwd Si vous ne spécifiez aucun fichier, la valeur par lsdéfaut est .. Et -dsignifie ne pas imprimer le contenu du répertoire, imprimez le répertoire lui-même.
Mikel
1
@cwd essayez d' utiliser ls -pil montre l' /après les noms de répertoire. Il en */va de même pour un modèle qui correspond au nom du répertoire et à la /liste déroulante.
Pitt
J'ai créé une fonction implémentant la réponse de @ Steven_D pour mon fichier ~ / .bash_aliases: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Réponses:

84

Je sais qu'il y a déjà une réponse sélectionnée, mais vous pouvez obtenir le comportement demandé simplement avec ls:

ls -ld -- */

(Notez que le signe '-' marque la fin des paramètres, empêchant les noms de dossier commençant par un trait d'union d'être interprétés comme des options de commande supplémentaires.)

Ceci listera tous les répertoires non cachés (sauf si vous configurez les globs de votre shell pour les développer) dans le répertoire de travail actuel dans lequel il est exécuté (notez qu'il inclut également des liens symboliques vers des répertoires). Pour obtenir tous les sous-répertoires d'un autre dossier, essayez simplement:

ls -ld /path/to/directory/*/

Notez que le -l est facultatif.

Steven D
la source
5
Agréable. Je n'ai jamais considéré que les répertoires avaient une implicite /à la fin - mais maintenant que je vois que vous répondez, cela a du sens. Après tout, la complétion par tabulation l'ajoute toujours.
gvkv
-d for dir, -l for long format. Quel est le but de --?
Dineshkumar
1
Bien que cela semble court et fonctionne dans la plupart des cas, on peut ne pas vouloir utiliser cette approche lorsqu'un vrai répertoire est nécessaire, et non un lien symbolique. C'est donc findun bon choix dans ce cas.
biocyberman le
1
finda également l'avantage lorsque le nombre de répertoires dépasse la longueur maximale de l'argument.
Steven D
Travailler en arrière, je viens de réaliser que vous pouvez simplement ignorer quoi que ce soit avec une extension: ls -alhF --ignore=*.*. Je ne sais pas si cela .myHiddenFolder
gérerait bien
14

Non, mais une simple findcommande le fera:

find . -type d -depth 1

ou grep

ls -F | grep /

Vous pouvez alors alias l’un ou l’autre si nécessaire.

gvkv
la source
6
Sur Ubuntu 14.04 c'était -maxdepth 1. Voulais aussi findque je retourne la commande:find . -maxdepth 1 -type d
Brad Cupit
Cette ls -F | grep /solution fait des merveilles! Il semble que ce soit le seul sur lequel je peux travailler sur ma machine FreeBSD. Je pense que l'utilisation de poisson signifie que tout */peut ne pas fonctionner?
cjm
Je n'ai jamais travaillé avec Fish, je ne suis donc pas sûr, mais l'option -F peut faire des miracles.
Gvkv
7

J'aime que l' utilitaire d' arborescence donne un aperçu de la structure des répertoires. Il est disponible dans MacPorts et toutes les distributions Linux que j'ai essayées.

tree -d -L 2

Cela montrerait tous les répertoires, deux niveaux de profondeur.

Claes Mogren
la source
6

J'avais aussi besoin de voir les répertoires cachés, donc j'ai modifié la suggestion ci-dessus pour répondre à mes besoins

ls -d -- */ .*/

(selon le shell, cela peut aussi inclure .et ..)

Neil Chandler
la source
2

Avec zsh(comme cela se trouvait par défaut sur macOS, il existait même auparavant /bin/sh), vous utiliseriez des qualificatifs glob pour sélectionner les fichiers en fonction de leur type:

  • Liste des répertoires non cachés:

    ls -d -- *(/)
    
  • Répertoriez tous les répertoires:

    ls -d -- *(D/)
    

    ( .et ..sont toujours exclus, ajoutez-les individuellement si vous les voulez)

  • Incluez également des liens symboliques vers des répertoires:

    ls -d -- *(D-/)
    

    ( -fait en sorte que d'autres qualificatifs s'appliquent après la résolution du lien symbolique).

Stéphane Chazelas
la source
-1

Je pense que ls a un bug sur Mac OS X. Une solution consiste à utiliser grep ... ls -l / | grep "^d"

duffbeer703
la source
1
C'est bien de savoir que je ne suis pas la seule personne à utiliser le grep "^d"hack
Michael Mrozek
6
Autant que je sache, le comportement qu'il décrit n'est pas un bogue et est le même si on utilise GNU ls. L'option -d affiche la liste du répertoire et non son contenu. Pour voir pourquoi cela peut être utile, voyez la différence entre ls -l /homeetls -dl /home
Steven D
Les carats ne sont pas spéciaux pour la coquille. Vous pouvez simplement utiliser ls -l / | grep ^d. Si vous êtes allez utiliser des guillemets, puisque vous n'avez pas besoin des paramètres, les rendre simples guillemets. ls -l / | grep '^d'. Oui, je suis un pédant. Mais vraiment, fais ça. :)
Wildcard
-1
$ ls -p | grep /

L' -pindicateur fera lsajouter une barre oblique (`/ ') après chaque nom de fichier si ce fichier est un répertoire.

Jamin Shanti
la source
-2

Le moyen le plus simple consiste à taper la commande suivante. Cela fonctionne sur la plupart des plates-formes et versions UNIX et Linux. Vous pouvez ignorer le -Fsi vous voulez, mais c'est l'argument qui ajoute le / à la fin du nom du répertoire. L' -Cargument ne capture que les noms de répertoire - tous dans le répertoire actuel. Si vous voulez voir uniquement les répertoires et les sous-répertoires dans le chemin actuel, ajoutez simplement l' -Rargument ( ls -CFR).

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 
Willie Lopez
la source
1
Dans toutes les lsmises en œuvre que je connais et dans la spécification POSIX de ls, -Cest à la sortie en colonnes , de ne pas ignorer les fichiers non-répertoire. Dans votre exemple, les /sont imprimés avant les noms de fichiers, ce que ne lsferait aucune implémentation. Avec -F, /est ajouté au nom de fichier des fichiers de répertoire.
Stéphane Chazelas
Quand j’ai vu cette réponse, je me suis demandé «Où est-ce vrai?» @ StéphaneChazelas et Jeff Schaller - ne vous opposez-vous pas aux réponses manifestement fausses?
G-Man le
-3
ls -G

cela montrera vos répertoires en bleu

utilisateur197967
la source
1
Ne voyez-vous que les répertoires lorsque vous utilisez cette commande?
don_crissti