IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Ksh, recherche récursive


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Ksh, recherche récursive
    Bonjour, j'ai un programme a faire en recursivite et je ne sais pas du tout comment faire en ksh.

    On me donne un fichier et un nom de repertoire, et je dois rechercher dans tous l'arborescence ce repertoire et apres le fichier.

    Je sais que je dois partir de /home mais je sais vraiment pas comment faire.

    Merci

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    la réponse est find

    man find

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home -type f -name "nomdufichier" -print
    tu obtiens alors le chemin complet vers le fichier
    dans le man page regarde particulierement cette option -type

    et tu as la solution à ta demande.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Ta commande marche mais que si tu te trouve dans le repertoire /home.

    On me donne en parametre le nom du repertoire pas son chemin courant. Je dois retrouver à partir de mon /home, le chemin courant de ce repertoire en utilisant de la recursivite.

    Citation Envoyé par frp31
    la réponse est find

    man find

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home -type f -name "nomdufichier" -print
    tu obtiens alors le chemin complet vers le fichier
    dans le man page regarde particulierement cette option -type

    et tu as la solution à ta demande.
    Sinon ta commande pourrait me servir pour une autre question, Merci!!

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    je te donne qu'un bout de solution

    ensuite tu peux couper le résultat en pipant les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cd /home 
    find . -type d -name "toto" -print | DEUXIEME COMMANDE | 3eme commande
    par exemple te donnera les chemins sans le 1er

    etc...etc...

    ce qui te permet de trier le résultat de find ensuite à toi de finir selon tes besoins mais le find est récursif dans ça recherche alors à quoi bon réinventer la roue....

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu dois chercher un fichier dans un répertoire ayant un nom spécifique ?

    Si oui, alors find te permets effectivement de faire ce que tu souhaites : *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /home -type d -name "nom_de_ton_repertoire" -exec find \{} -type f -name "nom_de_ton_fichier" \;
    Cela cherche tous les répertoires à partir de /home se nommant "nom_de_ton_repertoire", et dans ceux-ci, il cherche tous les fichiers nommés "nom_de_ton_fichier".

    find est une commande extrèmement puissante, masi il faut connaître un peu ses options, sinon le nombre de réponse est beaucoup trop grand et ne correspond pas aux attentes.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Le find est bien mais j'utilise autre chose dans mon shell.

    Je cherche le moyen de trouver un programme qui me permet de trouver un repertoire n'importe où dans l'arborescence (juste avec son nom) et apres je cherche mon fichier. Mais on m'a dit qu'il fallait que le fasse en recurcivite et je ne vois pas comment faire.

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Bonjour,

    Donc en gros on te demande de recoder find...

    Donc, pour cela, tu créés une focntion qui liste les répertoires avec un ls
    Puis pour chaque répertoire trouvé, tu rappelles ta fonction, avec le répertoire en paramètre.

    A toi de voir ensuite à quel moment tu souhaites effectuer la recherche de fichier : soit tu descends d'abord au plus profond dans l'arborescence, puis tu cherches ton fichier, soit à chaque fois que tu rentres dans un répertoire, tu recherches ledit fichier, puis s'il n'est pas toruvé ou que tu souhaites continuer, alors tu rappelles ta fonction de parcours de répertoire.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Voila c'est sa mais je ne vois pas du tout comment commencer et faire.

  9. #9
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Bonjour,

    Voici deux fonctions très simple, écrite en sh, la seconde appelant la première :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    INFO_MSG()
    {
        [ "$DEBUG" -eq 1 ] && printf "$@" >> "$DEBUG_FILE"
        printf "$@"
    }
     
    PRINT_OK()
    {
        if test "$DEBUG" -eq 0
            then
            INFO_MSG "OK DEBUG\n"
        else
            INFO_MSG "OK\n"
        fi
    }
    Maintenant, il faut que tu écrives tes propres fonctions, l'une qui parcourt les répertoires, et l'autre qui liste les ficheirs.

    Si tu as des soucis d'algorithme, je peux déplacer ton post dans le forum éponyme, dans lequle tu auras plus de réponses.
    Si tu as des soucis d'implémentation, alors c'est ici que ca se passe.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Je vais essayer comme tu as dit, on vera se que ca donne ^^

    Merci bcq!

Discussions similaires

  1. KSH : recherche d'un mot dans une chaine de caractère
    Par Cj_Dal dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 10/08/2010, 09h41
  2. Réponses: 4
    Dernier message: 07/04/2009, 15h36
  3. Recherche des fichiers avec ksh
    Par mzt.insat dans le forum Linux
    Réponses: 3
    Dernier message: 15/05/2006, 22h51
  4. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18
  5. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo