Commande find: mauvais résultat ?

Résolu
charline159 Messages postés 216 Statut Membre -  
charline159 Messages postés 216 Statut Membre -
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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1. charline159 Messages postés 216 Statut Membre 1
       
      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
      1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > charline159 Messages postés 216 Statut Membre
         
        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
      2. charline159 Messages postés 216 Statut Membre 1 > mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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