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 589
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    le répertoire /DIR/SDIR1/SDIR2/SDIR3/SDIR4/ est-il connu ? ou ne connais-tu que /DIR/ ?

  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 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    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.

  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 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    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.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    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

  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 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    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/

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    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 309
    Points : 12 817
    Points
    12 817
    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

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