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

Shell et commandes GNU Discussion :

Script shell Chercher un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Script shell Chercher un fichier
    Bonjour,
    Je cherche un script shell qui puisse
    1- prendre en entrée une variable, exemple: nomdeserveur.cpu
    2- faire une recherche de cette variable dans un répertoire qui contient des sous répertoires.
    La recherche devra débuter par le dernier sous-répertoire en remontant vers le niveau supérieur si je ne trouve pas le fichier
    3_ exemple variable : aix1.cpu
    répertoire : /DIR/SDIR1/SDIR2/SDIR3/SDIR4/
    ls /DIR/SDIR1/SDIR2/SDIR3/SDIR4/aix1.cpu ( si je trouve le fichier dans /SDIR4/ donc je l'affiche ensuite fin programme sinon je chercher dans le /DIR/SDIR1/SDIR2/SDIR3/aix1.cpu ( si je trouve le fichier donc je l'affiche ensuite fin programme sinon je chercher dans /DIR/SDIR1/SDIR2/aix1.cpu (idem ..) si je ne trouve pas le fichier je dois afficher un fichier default.cpu qui se trouve dans le répertoire /DIR/
    merci de votre aide
    George

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    le répertoire /DIR/SDIR1/SDIR2/SDIR3/SDIR4/ est-il connu ? ou ne connais-tu que /DIR/ ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    bonjour,
    uniquement le /DIR/
    merci

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    Qu'as-tu fais ? Qu'est-ce qui bloque ?

    Note que:
    • un répertoire ne contient pas de variable. Donc ta question n'a pas de sens. Si tu veux un fichier, oriente toi vers "find". Si tu cherche un fichier texte contenant ta variable, oriente toi vers "grep".
    • mieux vaut récupérer tous les fichiers par un find et garder celui ayant le plus de parents. Ce n'est alors que de la manipulation de fichier texte.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    vous n'avez pas compris :
    Input fichier ( variable ) exemple: NomServeur.cpu , NomServeur.swap , NomServeur.ora

    Répertoire : /DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/SDIR????

    La recherche de fichier ( exemple file = $NomServeur.cpu ) devra débuter par le dernier sousrépertoire ( /DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/SDIR???? )
    si il ne trouve pas le fichier il doit chercher en remontant vers le niveau superieur /DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5 ( si fichier existe j'affiche le fichier NomServeur.cpu ensuite exit 0 )
    si il ne trouve pas le fichier il doit chercher /DIR/SDIR1/SDIR2/SDIR3/SDIR4 idem jusqu'à /DIR/
    si il ne trouve pas le fichier dans le /DIR/ le script doit afficher le fichier default.cpu

    si le fichier NomServeur.cpu existe dans deux répertoires je doit afficher uniquement le fichier qui se trouve dans le dernier sousrépertoire
    exemple : ls /DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/SDIR????
    $ NomServeur.cpu
    ls DIR/SDIR1/SDIR2/SDIR3
    $ NomServeur.cpu
    dans ce cas je doit afficher uniquement le fichier /DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/SDIR????/NomServeur.cpu

    ls /DIR/
    $default.cpu , default.swap, default.ora

    merci.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    débuter par le dernier sousrépertoire
    ce n'est pas possible : tu ne peux pas remonter du dernier sous-sol d'un parking sans avoir parcouru les niveaux précédents au préalable.

    ce que dit Flodelarab me semble tout à fait censé.
    • Si tu veux un fichier, oriente toi vers "find". Si tu cherches un fichier texte contenant ta variable, oriente toi vers "grep".
    • mieux vaut récupérer tous les fichiers par un find et garder celui ayant le plus de parents. Ce n'est alors que de la manipulation de fichier texte.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Citation Envoyé par georg2014 Voir le message
    vous n'avez pas compris
    C'est toi qui prends pas le temps de comprendre.

    Mais comme je suis magnanime, je te donne un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ find . -name "NomServeur.cpu"
    ./DIR/SDIR1/SDIR2/SDIR3/NomServeur.cpu
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/NomServeur.cpu
    ./DIR/NomServeur.cpu
    $ find . -name "NomServeur.cpu"|awk -F'/' '{if (NF>pg){pg=NF;res=$0}} END{print res;}'
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/NomServeur.cpu
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    voila j'ai trouvé sans ls sans find

    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
    17
    18
    19
    20
    21
    IAm="${0%%*/}"
    if [ $# -ne 2 ]
    then    printf 'Usage: %s directory file\n' "$IAm"
        exit 1
    fi
    dir="$1"
    file="$2"
    while :
    do    if [ -e "$dir/$file" ]
        then    printf 'File "%s" found in directory "%s"\n' "$file" "$dir"
         cat $dir/$file
            exit 0
        fi
        parent_dir=DIRname "$dir")"
        if [ "$parent_dir" = "$dir" ]
        then    printf 'File "%s" not found.\n' "$file"
        ext=`echo ${file} | awk -F"." '{ print ($2) }'`
        cat /DIR/default.$ext
         exit 0
        fi
        dir="$parent_dir.........................................................;

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    ça ne fonctionne que si tu donnes le chemin du dernier sous-répertoire, contrairement à ce que tu as dit plus haut :
    Citation Envoyé par N_BaH
    le répertoire /DIR/SDIR1/SDIR2/SDIR3/SDIR4/ est-il connu ? ou ne connais-tu que /DIR/ ?
    Citation Envoyé par georg2014
    uniquement le /DIR/
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Juste pour le fun (et dans le cas ou tu as plusieurs fois le fichier dans répertoires différents mais au même niveau):
    Mon arborescence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ find
    .
    ./DIR
    ./DIR/NomServeur.cpu
    ./DIR/SDIR1
    ./DIR/SDIR1/SDIR2
    ./DIR/SDIR1/SDIR2/SDIR3
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/NomServeur.cpu
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/SDIR6
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5b
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5b/NomServeur.cpu
    ./DIR/SDIR1/SDIR2/SDIR3/NomServeur.cpu
    La commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ find . -mindepth $(find . -name "NomServeur.cpu" -printf "%d\n" | sort -k1,1 -nru | head -1) -name "NomServeur.cpu"
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5/NomServeur.cpu
    ./DIR/SDIR1/SDIR2/SDIR3/SDIR4/SDIR5b/NomServeur.cpu
    Cordialement.

Discussions similaires

  1. script shell: fonction taille fichier/dossier
    Par guluk21 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/05/2008, 18h17
  2. script shell répartition de fichiers en tar
    Par mikadoo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/05/2008, 21h14
  3. Script Shell sur des fichiers et chaînes
    Par chris_wafer dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 21h45
  4. Exécuter un script shell via le fichier .mailrc
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/06/2007, 18h42
  5. script shell : lire un fichier et donner pour traitement au script
    Par pc974 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 14/05/2007, 14h38

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