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 :

Parcourir récursivement des sous répertoires


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 24
    Par défaut Parcourir récursivement des sous répertoires
    Bonjour,

    J'ai un répertoire "data" qui peut contenir n sous-dossiers. Le dernier sous-dossier contient un fichier "config.yml" que je souhaite parser.
    Je ne vois pas ou se situe le problème.
    Merci de votre aide.

    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
     
     
    #!/bin/sh
     
    fonction()
    {
    	home=$(pwd)
    	fichier="config.yml"
     
    	for i in `ls $home/data/*`
    	do
    		if [ -e $fichier ]
    		then
    			while read line
    			do
    				case $line in
    					*"jdkversion"*)
    						param=`echo $line | awk -F":" '{ print $2}'`
    						echo ${param}
    					;;
    				esac
    			done < $fichier
    		fi
    	done
    }
     
    fonction

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

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

    - home=$(pwd) est inutile : il existe $HOME, ou $PWD.
    - on ne parcourt pas la sortie d'une commande avec une boucle for, parce que for lit des mots, pas des lignes.
    - on n'utilise plus `, et on évite de mélanger l'emploi de $() et `.
    - on n'utilise pas ls dans un script; parce que c'est inutile (une boucle for sur le Développement des chemins (cf. man bash) fait mieux le travail en protégeant les caractères de l'IFS)
    - il faut toujours mettre les variables entre guillemets. TOUJOURS; à moins de savoir pourquoi !!!

    avant de répondre, il faut qu'on sache :
    /bin/sh c'est parce que tu dois rester strictement POSIX, ou parce que tu ne sais pas que /bin/sh n'est pas la même chose que /bin/bash ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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

    À noter : un site de vérification de syntaxe shell : https://www.shellcheck.net/

    J'ai bien ri quand il a dit que la variable "i" de la boucle n'était utilisée nulle-part.
    Relis ton code.

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Ça sera toujours intéressant pour toi de corriger ton code bash, mais en gros, j'ai l'impression que tu peux le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ~/data -type f -name 'config.yml' -print0 | xargs -0 awk -F':' '/jdkversion/{print FILENAME ": " $2}'

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 357
    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 357
    Par défaut
    Ou en bash, avec une boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    shopt -s globstar
    for i in "$HOME"/**/config.yml
    do
      awk -F':' '/jdkversion/{print FILENAME ": " $2}' "$i"
    done

Discussions similaires

  1. Comptage des sous-répertoires d'un répertoire
    Par GBAGO dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/09/2007, 15h11
  2. Réponses: 6
    Dernier message: 29/05/2007, 13h33
  3. Réponses: 6
    Dernier message: 25/10/2006, 21h00
  4. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 16h41
  5. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33

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