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.
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.
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:
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.
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.
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).
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.
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).
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?
ls -d
donne seulement.
et pourquoi*/
faut-il l'ajouter à la fin pour que cela fonctionne?ls
défaut est.
. Et-d
signifie ne pas imprimer le contenu du répertoire, imprimez le répertoire lui-même.ls -p
il 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.Réponses:
Je sais qu'il y a déjà une réponse sélectionnée, mais vous pouvez obtenir le comportement demandé simplement avec
ls
:(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:
Notez que le -l est facultatif.
la source
/
à 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.-d for dir, -l for long format
. Quel est le but de--
?find
un bon choix dans ce cas.find
a également l'avantage lorsque le nombre de répertoires dépasse la longueur maximale de l'argument.ls -alhF --ignore=*.*
. Je ne sais pas si cela.myHiddenFolder
Non, mais une simple
find
commande le fera:ou
grep
Vous pouvez alors alias l’un ou l’autre si nécessaire.
la source
-maxdepth 1
. Voulais aussifind
que je retourne la commande:find . -maxdepth 1 -type d
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?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.
Cela montrerait tous les répertoires, deux niveaux de profondeur.
la source
J'avais aussi besoin de voir les répertoires cachés, donc j'ai modifié la suggestion ci-dessus pour répondre à mes besoins
(selon le shell, cela peut aussi inclure
.
et..
)la source
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:
Répertoriez tous les répertoires:
(
.
et..
sont toujours exclus, ajoutez-les individuellement si vous les voulez)Incluez également des liens symboliques vers des répertoires:
(
-
fait en sorte que d'autres qualificatifs s'appliquent après la résolution du lien symbolique).la source
Je pense que ls a un bug sur Mac OS X. Une solution consiste à utiliser grep ...
ls -l / | grep "^d"
la source
grep "^d"
hackls -l /home
etls -dl /home
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. :)L'
-p
indicateur ferals
ajouter une barre oblique (`/ ') après chaque nom de fichier si ce fichier est un répertoire.la source
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
-F
si vous voulez, mais c'est l'argument qui ajoute le / à la fin du nom du répertoire. L'-C
argument 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'-R
argument (ls -CFR
).la source
ls
mises en œuvre que je connais et dans la spécification POSIX dels
,-C
est à 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 nels
ferait aucune implémentation. Avec-F
,/
est ajouté au nom de fichier des fichiers de répertoire.cela montrera vos répertoires en bleu
la source