La commande ls sous Linux est utilisée pour lister le contenu de n’importe quel répertoire.
Par défaut, il répertorie tous les contenus, qu’il s’agisse d’un fichier ou d’un répertoire ou d’un lien ou d’un canal nommé.
Mais que faire si vous voulez lister uniquement les répertoires? Comment tu fais ça ?
Comme tout ce qui est sous Linux, il existe plusieurs façons d’accomplir la même tâche. Énumérer uniquement les répertoires n’est pas différent:
- ls-d*/
- ls-l|grep ‘^d’
- trouver. – profondeur maximale 1 – type d
- echo* /
- arbre -d-L 1
Ne t’inquiète pas. Je vais vous expliquer les choses en détail. Voici le contenu du répertoire que je vais utiliser dans les exemples ici:
- Utilisez la commande ls pour lister uniquement les répertoires
- Listez uniquement les sous-répertoires dans un répertoire spécifique
- Utilisez la combinaison de la commande ls et grep
- Utilisez la commande find pour répertorier uniquement les répertoires
- Utilisez la commande tree pour lister uniquement les répertoires
- Utilisation de la commande echo pour lister les répertoires
Utilisez la commande ls pour lister uniquement les répertoires
Il est toujours bon de le faire avec la commande ls familière car c’est la commande que vous utilisez pour afficher le contenu d’un répertoire.
Pour lister uniquement les sous-répertoires, utilisez l’option -d
avec la commande ls comme ceci:
ls -d */
Voici la sortie qu’il affiche:
Documents]$ ls -d */another_dir/ my_dir/
Pourquoi */
? Parce que sans cela, ls -d
ne retournera que le nom du répertoire. L’option -d
liste les répertoires pas son contenu (qui comprend les fichiers, les répertoires, etc.).
Le */
est un motif. Avec *
, vous listez tout le contenu (y compris le contenu des sous-répertoires) et /
limite le modèle aux répertoires.
Cette image représente assez bien la différence.
Vous pouvez le combiner avec l’option de liste longue -l
et la plupart des autres options:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
Si vous ne voulez pas la barre oblique finale (/) à la fin des noms de répertoire, vous pouvez utiliser la commande couper pour le découper:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Listez uniquement les sous-répertoires dans un répertoire spécifique
La commande ci-dessus fonctionne dans le répertoire courant. Et si vous n’êtes pas dans le même répertoire?
Dans cette situation, vous pouvez utiliser */
à la fin du chemin du répertoire avec ls -d
:
ls -d Path/To/Dir/*/
Voici un exemple où je quitte le répertoire Documents et ne liste que les répertoires dans le répertoire Documents:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
Avez-vous remarqué qu’il ne répertorie pas le répertoire caché? C’est une lacune de cette méthode. Vous pouvez utiliser ls -d .*/
pour afficher les répertoires cachés, mais il n’affiche que les répertoires cachés.
Utilisez la combinaison de la commande ls et grep
Vous pouvez toujours compter sur la bonne vieille commande grep pour filtrer la sortie pour un contenu spécifique.
Si vous énumérez longuement le contenu, vous pouvez identifier les répertoires car commencez par d
.
Vous pouvez utiliser grep pour filtrer le contenu qui commence par d:
ls -l | grep '^d'
Mais cela vous donne beaucoup plus de champs que les noms de répertoire:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Utilisez la commande find pour répertorier uniquement les répertoires
Voici comment utiliser la commande find pour répertorier uniquement les sous-répertoires:
find directory_path -maxdepth 1 -type d
J’espère que vous connaissez la commande find. Je vais quand même l’expliquer.
Avec type d
, vous demandez à la commande find de ne rechercher que les répertoires.
Avec maxdepth 1
, vous demandez à la commande find de garder la recherche au niveau actuel uniquement (et de ne pas entrer dans les sous-répertoires).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
Comme vous pouvez le voir dans la sortie ci-dessus, il affiche également le répertoire caché.
Utilisez la commande tree pour lister uniquement les répertoires
Si votre objectif est de lister uniquement les répertoires, vous pouvez également utiliser la commande tree.
Par défaut, la commande tree vous donne la structure complète du répertoire. Vous pouvez le modifier pour afficher uniquement les répertoires et uniquement au niveau actuel.
tree -dai -L 1
- d – recherchez uniquement les répertoires
- a – recherchez également les fichiers et répertoires cachés
- i – supprimez l’arborescence de l’affichage
- L 1 – n’allez pas dans les sous-répertoires
Voici la sortie:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
Utilisation de la commande echo pour lister les répertoires
Le candidat improbable? Vous serez surpris de savoir que la commande echo sous Linux peut également être utilisée pour afficher le contenu d’un répertoire. Essayez d’utiliser echo *
et voyez par vous-même.
Similaire à la commande ls, vous pouvez également utiliser le modèle */
pour répertorier uniquement les répertoires du répertoire de travail en cours.
echo */
Voici la sortie qui est identique à ce que vous avez obtenu avec la commande ls -d
:
, il pourrait y avoir d’autres façons de lister uniquement les répertoires, pas les fichiers. En fait, les méthodes discutées ici peuvent avoir des si et des mais en fonction de ce que vous recherchez.
Si votre objectif est simplement d’afficher les répertoires, la plupart des commandes dont j’ai discuté fonctionneraient. Si vous voulez quelque chose de plus spécifique comme obtenir uniquement le nom des répertoires avec une barre oblique, etc., vous devrez faire un formatage par vous-même.
J’espère que vous trouverez cette astuce Linux utile. Les questions et suggestions sont toujours les bienvenues.