# \[Shell\] Comment afficher en couleurs les noms des sous - répertoires en fournissant une expression régulière?

**URL:** <https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087>\
**Category:** Support Debian\
**Created:** [Novembre 4, 2023, 5:24 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087 "2023-11-04T17:24:17Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 5:24 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/1 "2023-11-04T17:24:17Z")

</div>

Bonjour.  
Si vous avez du temps à investire, je tombe sur cette enigme ici, comment afficher en couleurs les noms des sous - répertoires en fournissant une expression régulière ?

C’est à dire…

Je suis sur Débian/bash, habituellement, j’utilise la commande ‹&nbsp;ls&nbsp;› pour lister le contenu d’un répertoire.

Ici j’ai un gros répertoire contenant des répertoire qui on un nom dans un format pârticulier.  
Je donne un exemple de contenu afin de savoir comment afficher en couleur uniquement le nom du répertoire.

Content :  
home/david/program  
home/david/project  
home/david/project-main  
home/david/project-main-ain  
home/david/project-main-deux  
home/david/project-main-deux-sud  
home/david/project-main-deux-nord  
home/david/project-pack  
home/david/project-pack-shell  
home/david/project-pack-screen

End list

Et je souhaiterais afficher

Je souhaite en bleu, qui est la couleur par defaut des nom de répertoire :

main  
pack

End list

S’il vous plait !

Merci.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 5:38 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/2 "2023-11-04T17:38:16Z")

</div>

Pardon, je me suis embrouillé en composant mon message.

je voudrais afficher :

project-main  
project-pack

Merci.

---

<div class="post-metadata">

**Author:** ![libresurf](https://www.debian-fr.org/user_avatar/www.debian-fr.org/libresurf/32/5259_2.png) [@libresurf](https://www.debian-fr.org/u/libresurf)\
**Post date:** [Novembre 4, 2023, 5:52 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/3 "2023-11-04T17:52:07Z")

</div>

Bonjour @anon2873143,

Pour afficher les répertoires en couleur :

```
ls --color=auto

```

Pour n’afficher que les répertoires :

```
ls -d */

```

ou

```
ls -ld */

```

pour avoir plus de détails.

---

<div class="post-metadata">

**Author:** ![libresurf](https://www.debian-fr.org/user_avatar/www.debian-fr.org/libresurf/32/5259_2.png) [@libresurf](https://www.debian-fr.org/u/libresurf)\
**Post date:** [Novembre 4, 2023, 5:57 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/4 "2023-11-04T17:57:22Z")

</div>

Ou sinon, si je n’ai pas bien compris et que tu veux toute ta sortie avec uniquement «&nbsp;project-main&nbsp;» et project-pack" en couleur :

```
ls -ld */ | grep --color -E 'project-(main|pack)'

```

C’est bien ça ?

---

<div class="post-metadata">

**Author:** ![libresurf](https://www.debian-fr.org/user_avatar/www.debian-fr.org/libresurf/32/5259_2.png) [@libresurf](https://www.debian-fr.org/u/libresurf)\
**Post date:** [Novembre 4, 2023, 6:05 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/5 "2023-11-04T18:05:09Z")

</div>

Et pour le mettre en bleu :

```
export GREP_COLORS='ms=01;34'
ls -ld */ | grep --color -E 'project-(main|pack)'
```

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 6:20 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/6 "2023-11-04T18:20:14Z")

</div>

Merci.

Mon souci ici est lié au chemin du répertoire de travail.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 6:21 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/7 "2023-11-04T18:21:12Z")

</div>

Mercci.

Je vais vérifier.

Je connais trop mal grep pour y avoir pensé.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 6:31 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/8 "2023-11-04T18:31:52Z")

</div>

Merci à vous pour vos réponses rapides.

Je vous donne, ce que j’ai fais entre temps.

```
texte pr#!/bin/bash

```

cd $1  
ls -1 $4 `basename -s -$2 \`dirname $1``$3  
cd …/…  
éformaté indenté par 4 espaces

C’est pas documenté, je viens de le faire.  
Le script est la solution pour contrer le problème du chemin courant avec la commande ‹&nbsp;ls&nbsp;›.

L’argument 1 est le chemin d’accès.  
Comme le chemin contient un sufix, on donne le suffix et on ajoute le tiret de séparation. de l’argument 2 qui est le numéro de version.  
L’argument 3 sert de pattern d’expression régulière.  
Et si on veux passer des options à ls, l’argument 4 est passé à la commande ‹&nbsp;ls&nbsp;›.

Pour le pattern, on utilise les quote ou double quote sur bash.

Avec la commande : lg home-1.0.0/david 1.0.0 «&nbsp;\*&nbsp;» -d

J’affiche tous les répertoires de /home-1.0.0/david

En espérant que ces informations n’induise pas d’erreur à part «&nbsp;no such file or directory&nbsp;»

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 6:48 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/9 "2023-11-04T18:48:09Z")

</div>

j’ai oublié un détail.

En fait mes répertoires s’appellent :

home-1.0.0/david/home  
home-1.0.0/david/home-main  
home-1.0.0/david/home-pack

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 7:53 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/10 "2023-11-04T19:53:24Z")

</div>

TIPS : Après on peut faire un ficher d’appel pour divers noms de projet prenant un pattern supllementaire du pattern d’expression régulière de l’argument 3 de lg pour tous les projets contenant un ou des signe(s) moins ‹&nbsp;-&nbsp;› dans un ficher state et lancer state «&nbsp;_-_&nbsp;».

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 8:15 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/11 "2023-11-04T20:15:01Z")

</div>

Comme j’était sur le sujet depuis le début de la journée, je vous donne quelques scripts pour lister des fichers dans des branches de dossiers formater «&nbsp;name-version/pname/subproject/src/lib/\*&nbsp;»

Le premier répertoire de chacun des projets doit contenir un fichier de nom de sous projet «&nbsp;Project.lst&nbsp;» et un fichier de version «&nbsp;Versions.lst&nbsp;»

list : liste les fichers contenue dans les sous - projet \*/src/lib/

```auto
    #!/bin/bash
for dir in `ls -d ./*`; do
    version=`head -1 $dir/Versions.lst`
    pname=`basename -s -$version $dir`
    name=`head -1 $dir/Project.lst`
    table=`for i in \`ls $pname-$version/$name/*/src/lib/*$1\`; do echo \`basename -s '$1' $pname-$version/$name/*/src/lib/$i\`; done`;
    for i in `echo $table`; do
	dir=`basename -s $version$1 $i`
	echo `basename -s $1 \`ls $pname-$version/$name/$dir/src/lib/$i.$1\``-$version$1
    done;
done

```

texte préformaté indenté par 4 espaces

Prend un argument typiquemant l’extension des fichers à lister.

(J’ai ici modifié mon script pour prendre en considération l’argument 1, merci de me signaler un disfonctionnement éventuel.)

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 8:44 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/12 "2023-11-04T20:44:49Z")

</div>

Effectivement j’ai un sujet de conversation.

Je propose la correction suivante :

```auto
    #!/bin/bash
for dir in `ls -d ./*`; do
    version=`head -1 $dir/Versions.lst`
    pname=`basename -s -$version $dir`
    name=`head -1 $dir/Project.lst`
    table=`for i in \`ls $pname-$version/$name/*/src/lib/*.$1\`; do echo \`basename -s .$1 $pname-$version/$name/*/src/lib/$i\`; done`;
    for i in `echo $table`; do
	dir=`basename -s $version.$1 $i`
	echo `basename -s .$1 \`ls $pname-$version/$name/$dir/src/lib/$i.$1\``-$version.$1
    done;
done

```

Et de ne pas fornir le point de l’extension à l’appel le list.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 8:59 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/13 "2023-11-04T20:59:39Z")

</div>

Extraordinaire.  
Merci beaucoup.  
En partageant ce script, j’obtiens un autre résultat tant convoiter puisque qu’il s’agit de voir rapidement où j’en suis dans mon développement.

Le peut lister les specification avec l’extension spec séparémant des fichiers des fichier impl ou spec désigne les spécifications comme des entêtes et impl désigne les ficher implémentations en affichant le base name du fichier.

entête.h  
entête.c

affiche entête selon une des deux extentions.

En gros, si le fichier avec l’extension est présent on affiche avec un chemin absolu seulement le nom du fichier, sans l’extension.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 4, 2023, 9:37 UTC](https://www.debian-fr.org/t/shell-comment-afficher-en-couleurs-les-noms-des-sous-repertoires-en-fournissant-une-expression-reguliere/89087/14 "2023-11-04T21:37:27Z")

</div>

```
La commande que je vous propose de nommer 'lp' permet d'afficher le chemin complet et uniquement celui - ci :

#!/bin/bash
for dir in `ls -d ./*`; do
    version=`head -1 $dir/Versions.lst`
    pname=`basename -s -$version $dir`
    name=`head -1 $dir/Project.lst`
    table=`for i in \`/bin/ls -1 $pname-$version/$name/*/src/lib/*.$1\`; do echo \`basename -s .$1 $i\`-$version.$1; done`;
        for i in `echo $table`; do
	    file=`basename -s -$version.$1 $i`;
	    dir=`basename -s -$version.$1 $file`;
	    echo $pname-$version/$name/$dir/src/lib/`basename -s .$1 \`/bin/ls --color $pname-$version/$name/$dir/src/lib/$file.$1\``.$1
        done;
done;

```

Ici j’essais d’afficher le chemin complet en couleur mais mes fichiers n’ont pas de couleur et s’affiche en blanc.
