54 votes

Comment lister les dossiers en utilisant les commandes bash ?

Existe-t-il un moyen de lister uniquement les dossiers d'un répertoire en utilisant des commandes bash ? ( comme le ls liste tous les fichiers et dossiers )

71voto

Gaff Points 17889

Vous pouvez utiliser :

ls -d -- */

Puisque tous les répertoires se terminent par / cette liste ne contient que les répertoires du chemin d'accès actuel. Le site -d permet de s'assurer que seuls les noms des répertoires sont imprimés, et non leur contenu.

29voto

Rafael Almeida Points 1907

La réponse de Stephen Martin a donné un avertissement, et a également listé le dossier actuel, donc je suggèrerais

find . -mindepth 1 -maxdepth 1 -type d

(Ceci est sous Linux ; je n'ai pas pu trouver -maxdepth et -mindepth dans la page de manuel POSIX pour find)

13voto

squareborg Points 2365
find . -maxdepth 1 -type d

N'énumère que les dossiers. Et comme Teddy l'a souligné, vous aurez besoin de -maxdepth pour l'empêcher de récuser les sous-répertoires.

6voto

Skrud Points 2335

La réponse de Daniel est correcte. Voici cependant quelques ajouts utiles.

Pour éviter de lister les dossiers cachés (comme .git ), essayez ceci :

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \)

Et pour remplacer la barre oblique redoutée au début de find dans certains environnements, utilisez ceci :

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \) | sed 's|^\./||g'

2voto

Vous n'êtes pas "censé" analyser la sortie de ls, c'est ce qui est dit. Le raisonnement derrière cela est que la sortie est destinée à être lisible par l'homme et que cela peut la rendre inutilement compliquée à analyser, si je me souviens bien.

si vous ne voulez pas ls ou find, vous pouvez essayer de filtrer "*" avec "[ -d ]".

C'est ce que j'ai fait, pour une raison quelconque, ls et find ne fonctionnaient pas (les noms de fichiers avec des espaces et des parenthèses, je suppose, ou quelque chose d'autre que j'ai négligé), puis j'ai fait quelque chose du type

for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done

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