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 de création de liens symboliques


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Script shell de création de liens symboliques
    Bonjour,

    je cherche à faire un script permettant de créer récursivement des liens symboliques.
    Ma structure de dossier est à 3 niveaux: ATELIERS/
    TOOLS/
    FOLDER1/
    FOLDER2/

    Pour parcourir tous ces sous-dossiers, j'utilise trois boucles for imbriquée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
    cd "/cygdrive/e/GHOSTS/ATELIERS"
    for i in "*/"
    do
    	for j in "$i/*/"
    	do
    		for k in "$j/*"
    		do
    			ln -s "/cygdrive/e/GHOSTS/ATELIERS/$k" "/cygdrive/h/GHOSTS/ATELIERS/$k" 
    		done
                   done
    done
    Mon souci provient des variables i, j, k.
    $k contient bien tous les sous-dossiers, fonctionne.
    En revanche, m'affiche /*/*/*
    Je ne peux donc pas exécuter la dernière commande permettant de créer les liens symboliques


    Auriez-vous une idée ?


    Merci par avance

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut


    La wildcard lorsqu'elle doit être interprétée par Bash et non par un autre processus (find par exemple ou autres) ne doit pas être encadrée par des doubles quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in "/chemin/peu_importe"/*; do
        # ...
    done
    Cordialement,
    Idriss

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Comme indiqué par ok.Idriss, il faut bouger les guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
    cd "/cygdrive/e/GHOSTS/ATELIERS"
    for i in */
    do
    	for j in "$i"/*/
    	do
    		for k in "$j"/*
    		do
    			ln -s "/cygdrive/e/GHOSTS/ATELIERS/$k" "/cygdrive/h/GHOSTS/ATELIERS/$k" 
    		done
                   done
    done
    Citation Envoyé par gerem42 Voir le message
    Mon souci provient des variables i, j, k.
    $k contient bien tous les sous-dossiers,
    ça, ça m'étonnerait!!!
    Et, en plus, il ne devrait pas!
    [EDIT]Comme l'a si bien fait remarquer Flodelarab (bien vu! ), le dernier '*' s'expanse en sous-dossiers et fichiers. Donc je corrige:
    D'après ton algorithme, $k devrait contenir (à chaque tour de boucle) uniquement LE fichier ou sous-dossier courant (et non pas une liste de fichiers ou sous-dossiers)!

    echo $k fonctionne.
    En revanche, echo "$k" m'affiche /*/*/*
    C'est bien la preuve que $k ne contient pas l'élément courant (fichier ou sous-dossier)!!!
    $k contient effectivement la chaine de caractères "*/*/*/" (et non "/*/*/*" (comme tu dis)).
    Tu peux t'en convaincre en comptant le nb de caractères (avec echo ${#k} qui devrait retourner 6).

    La manière normale de voir le contenu d'une variable est echo "$k", car si la variable contient des caractères spéciaux (comme * ou ?), le shell va l'expanser si elle n'est pas protégée par des guillemets, ce qui explique que echo $k affiche tous les fichiers et sous-dossiers.
    [/EDIT]

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    D'accord mais alors quelle est la solution pour que je puisse créer un lien symbolique à chaque fois que je passe dans la 3ème boucle ?

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

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

    $k devrait contenir (à chaque tour de boucle) uniquement LE sous-dossier courant
    Ça, ça m'étonnerait!!!
    $k contient indifféremment les dossiers ou les fichiers.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    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 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Bonjour,
    Pas compris grand chose de ton arborescence, un petit "tree" que l'on comprenne mieux.

    Sinon, une petite commande pourrait je pense te simplifier ton script:
    Cordialement.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par gerem42 Voir le message
    D'accord mais alors quelle est la solution pour que je puisse créer un lien symbolique à chaque fois que je passe dans la 3ème boucle ?
    Ben... comment dire...?
    Peut-être que si tu relis la première phrase de mon message précédent et que tu en recopies juste le code que j'ai proposé, ça va marcher!

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Un grand merci à vous !

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

Discussions similaires

  1. Création d'un script Shell avec 4 paramètres en entrée
    Par Lerchechem dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/09/2013, 11h32
  2. Script shell création user Password
    Par debdarky dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 05/08/2013, 10h28
  3. Réponses: 2
    Dernier message: 31/10/2008, 15h03
  4. script shell création de groupes
    Par Tom0251 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 06/07/2008, 20h12
  5. création d'un liens symbolique
    Par dolsky dans le forum Administration système
    Réponses: 8
    Dernier message: 04/01/2008, 20h49

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