Commande find: mauvais résultat ?

Résolu/Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 21 avril 2021 à 14:26
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 28 avril 2021 à 21:11
Bonjour!
A l'aide la commande
find
, je souhaite chercher les dossiers commençant par B dans le répertoire courant (home). Je lance donc cette commande:


find . -type d -maxdepth 1 | egrep "^\./B*"


Cependant, voilà le résultat:

./Vidéos
./Bureau
./.themes
./IdeaProjects
./.cache
./.oh-my-bash
./.pki
./.icons
./.jdks
./.android
./CLionProjects
./Téléchargements
./PycharmProjects
./Modèles
./Public
./.config
./.zoom
./PhpstormProjects
./Images
./.vscode
./.cinnamon
./.java
./.symfony
./.mozilla
./.gnupg
./Documents
./.linuxmint
./.var
./.local
./fonts
./Musique


Pourquoi ai-je ces résultats alors que j'ai spécifié que je cherchais quelque chose qui commence par ./B ? Ou sinon, comment faire?


Configuration: Linux / Firefox 88.0

1 réponse

mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749
Modifié le 21 avril 2021 à 15:53
Bonjour,

Le résultat est normal, c'est juste que ce que la signification que tu donnes à
*
(n'importe quelle séquence de caractère) et celle de
*
dans grep (l'étoile de Kleene) sont différentes.

Ici, ton expression régulière conserve les lignes retournées par
find
sur la sortie standard qui :
  • ^
    : ... qui commencent par ...
  • \.
    : ... le caractère
    .
    ...
  • /
    : ... suivi de
    /
    ...
  • B*
    : ... suivi de B répété 0 fois ou plus ...
  • ... (sous entendu, suivi de n'importe quoi, puisque tu n'as pas mis de
    $
    en fin d'expression).


Dans ton cas, la bonne expression rationnelle serait tout simplement :

find . -type d -maxdepth 1 | egrep "^\./B"


Bonne chance
1
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
21 avril 2021 à 23:54
Ah oui effectivement, ce que je voulais faire était en fait ceci:
find . -type d -maxdepth 1 | egrep "^\./B.*"

(j'avais oublié que l'étoile s'appliquait directement à ce qui précédait)

ça marche parfaitement, merci pour ton aide :)
0
mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024 7 749 > charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022
22 avril 2021 à 17:01
Oui, note que le
.*
que tu as ajouté est superflu, mais reste correct. Si tu veux caractériser la ligne dans son intégralité, tu pourrais écrire
egrep "^\./B.*$"
. Mais personnellement j'utiliserais simplement
egrep "^\./B"
. Après chacun ses goûts ;-)
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1 > mamiemando Messages postés 33078 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 avril 2024
28 avril 2021 à 21:11
Effectivement, j'ai l'habitude de préciser
.*
mais c'est vrai que ce n'est pas très utile. En tout cas, merci à toi ! :)
0