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 :

Vérification de dossiers, si non présents création avec boucle


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 102
    Par défaut Vérification de dossiers, si non présents création avec boucle
    Bonjour à tous,

    je souhaiterais réaliser un script qui verifie la présence de plusieurs dossiers, si non présents, il sont créés

    dans les arborescence décrites ci-dessous, Débutant et ne maitrisant pas les boucles,les cases et autres... Je ne me vois pas écrire chaque section fois x dossiers

    Si vous pouviez eventuellement éclairer ma lanterne, je vous en remercie d'avance SVP

    L'arborescence:

    /appli/region_sud/centre_A/affaires
    /../../../traitement
    /../../../resultats

    /appli/region_sud/centre_B/affaires
    /../../../traitement
    /../../../resultats

    /appli/region_centre/centre_C/affaires
    /../../../traitement
    /../../../resultats

    /appli/region_centre/centre_D/affaires
    /../../../traitement
    /../../../resultats


    Un début de script :


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #!/bin/ksh
    #--------------------------------------------------------------------
    # @(#)SCRIPT       : Verification si presence des dossiers
    #--------------------------------------------------------------------
     
    centre_A=/appli/region_sud/centre_A
    affaires=${Centre_A}/affaires
    traitement=${Centre_A}/traitement
    resultats=${Centre_A}/resultats
    dir_log=/appli/Log
    log=${dir_log}/etat.log
    centre_B=/appli/region_sud/centre_B
    affaires=${Centre_B}/affaires
    traitement=${Centre_B}/traitement
    resultats=${Centre_B}/resultats
    centre_C=/appli/region_centre/centre_C
    affaires=${Centre_C}/affaires
    traitement=${Centre_C}/traitement
    resultats=${Centre_C}/resultats
    centre_D=/appli/region_Centre/centre_D
    affaires=${Centre_D}/affaires
    traitement=${Centre_D}/traitement
    resultats=${Centre_D}/resultats
     
     
    #-------------------------------------------------------------------#
    # Verification de la presence du dossier affaires pour le centre A
    # Si le dossier n'est pas present, il est créé
    #-------------------------------------------------------------------#
     
    msglog $LOG 0 0 "--Debut: Verification du dossier $affaires"
     
    if [[ ! -d $affaires ]]
    then
            msglog $LOG 0 0 "INFO: Dossier $affaires non present "
            mkdir $affaires
     
            if [[ $? -eq 0 ]]
            then
                    msglog $LOG 3 0 "ERREUR: Creation $affaires"
            fi
            msglog $LOG 0 0 "INFO: creation du dossier $affaires"
     
    fi
    msglog $LOG 0 0 "-Fin: Verification du dossier $affaires"
     
    #-------------------------------------------------------------------#
    # Verification de la presence du dossier traitement pour le centre A
    # Si le dossier n'est pas present, il est créé
    #-------------------------------------------------------------------#
     
    msglog $LOG 0 0 "--Debut: Verification du dossier $traitement"
     
    if [[ ! -d $traitement ]]
    then
            msglog $LOG 0 0 "INFO: Dossier $traitement non present "
            mkdir $traitement
     
            if [[ $? -eq 0 ]]
            then
                    msglog $LOG 3 0 "ERREUR: Creation $traitement"
            fi
            msglog $LOG 0 0 "INFO: creation du dossier  $traitement"
     
    fi
    msglog $LOG 0 0 "-Fin: Verification du dossier $traitement"
     
    #-------------------------------------------------------------------#
    # Verification de la presence du dossier resultats pour le centre A
    # Si le dossier n'est pas present, il est créé
    #-------------------------------------------------------------------#
     
    msglog $LOG 0 0 "--Debut: Verification du dossier $resultats"
     
    if [[ ! -d $resultats ]]
    then
            msglog $LOG 0 0 "INFO: Dossier $resultats non present "
            mkdir $resultats
     
            if [[ $? -eq 0 ]]
            then
                    msglog $LOG 3 0 "ERREUR: Creation $resultats"
            fi
            msglog $LOG 0 0 "INFO: creation du dossier $resultats"
     
    fi
    msglog $LOG 0 0 "-Fin: Verification du dossier $resultats"
     
    Fin

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    à ta place, je mettrais la liste des dossiers qui doivent exister dans un fichier texte.
    Puis je filtrerais cette liste avec celle existante (constituée par un find appli -type d), avec un | grep -Vf - fichierdereference.
    Enfin tous les fichiers restants alimenteront une boucle avec mkdir.

    Facile, systématique et sans douleur.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    Bonjour,

    pourquoi avoir choisi ksh ?

    il n'y a que ça comme "centres" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    centres={A..D}
    for c in $centres
    do
       centre="/appli/region_sud/centre_$c/affaires"
       for d in traitements resultats
       do
          test -d "$centre/$d" || mkdir "$centre/$d"
       done
    done
    mais, pourquoi avoir choisi ksh ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    tu as vraiment besoin de savoir si un répertoire est vide et logguer le tout ?
    sinon une approche un peu différente consiste à tenter de recréer systématiquement l'arborescence, avec un mix d'expansions d'accolades et l'option -p de mkdir :
    Citation Envoyé par man mkdir
    -p, --parents
    créer des répertoires parent (répertoires intermédiaires) si nécessaire, sans générer d'erreur s'ils existent
    de fait on est assuré que si les répertoires n'existent pas ils sont recréés automatiquement et l'arborescence est toujours disponible (en clair, plus nécéssaire de check, sauf besoin spécifique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ksh -o braceexpand  # ksh obligatoire ?
    mkdir -p /appli/region_{sud/centre_A,sud/centre_B,centre/centre_C,Centre/centre_D}/{,affaires,traitement,resultats}
    et le résultat (en tenant compte du 'C' majuscule sur region_Centre/centre_D) :
    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
    find /appli/
    /appli/
    /appli/region_Centre
    /appli/region_Centre/centre_D
    /appli/region_Centre/centre_D/affaires
    /appli/region_Centre/centre_D/resultats
    /appli/region_Centre/centre_D/traitement
    /appli/region_sud
    /appli/region_sud/centre_B
    /appli/region_sud/centre_B/affaires
    /appli/region_sud/centre_B/resultats
    /appli/region_sud/centre_B/traitement
    /appli/region_sud/centre_A
    /appli/region_sud/centre_A/affaires
    /appli/region_sud/centre_A/resultats
    /appli/region_sud/centre_A/traitement
    /appli/region_centre
    /appli/region_centre/centre_C
    /appli/region_centre/centre_C/affaires
    /appli/region_centre/centre_C/resultats
    /appli/region_centre/centre_C/traitement

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 102
    Par défaut Vérification de dossiers, si non présents création avec boucle
    Merci à tous pour vos réponses c'est OK

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2011, 00h40
  2. Recherche d'un formulaire et création s'il est non présent
    Par Glherbier dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/08/2008, 19h20
  3. [Plug-in] menu création script JavaCC non présent
    Par visiwi dans le forum Eclipse
    Réponses: 1
    Dernier message: 08/08/2008, 17h46
  4. Réponses: 4
    Dernier message: 07/12/2002, 15h24

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