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

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 ‹ ls › 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.

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

je voudrais afficher :

project-main
project-pack

Merci.

Bonjour @Lightman,

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.

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

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

C’est bien ça ?

Et pour le mettre en bleu :

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

Merci.

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

Mercci.

Je vais vérifier.

Je connais trop mal grep pour y avoir pensé.

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 ‹ ls ›.

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 ‹ ls ›.

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

Avec la commande : lg home-1.0.0/david 1.0.0 « * » -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 « no such file or directory »

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

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 ‹ - › dans un ficher state et lancer state « - ».

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 « name-version/pname/subproject/src/lib/* »

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

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

    #!/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.)

Effectivement j’ai un sujet de conversation.

Je propose la correction suivante :

    #!/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.

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.

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.