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 :

Recherche à l'aide d'une fonction récursive


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Recherche à l'aide d'une fonction récursive
    Salut,

    j'ai essayé de créer un script qui me permet de trouver la liste de tous les répertoires qui contiennent le fichier config. La recherche commence dans le répertoire passé en paramètre au script. La fonction rechercheRecursiveDossier parcourt les sous-répertoires (par ex. A B C D) du dossier passé en paramètre. Si le fichier config se trouve dans le sous-répertoires "A" la fonction n'ira pas chercher le fichier config dans les sous-répertoires de "A" mais elle passera au sous-répertoire "B". Si maintenant le répertoire "B" ne possède pas le fichier config alors la fonction va chercher dans les sous-répertoires de "B" et ainsi de suite.

    Voici mon code :

    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
     
    #!/bin/bash
     
    rechercheRecursiveDossier()
    {	 
    	for line in `find "$1" -mindepth 1 -maxdepth 1 -type d`
    	do
    		if verifDossier "$line" ;then
    			tabRep[${#tabRep[*]}]="$line"
    		else
    			tabTemp=$(rechercheRecursiveDossier "$repertoire")
    			tabRep=("${tabRep[@]}" "${tabTemp[@]}")
    		fi
    	done
     
    	echo "$tabRep"
    }
     
    verifDossier()
    {
    	if [ ! -f "$1/config" ] ;then
    		return 1
    	fi
    	return 0
    }
     
    n=$(rechercheRecursiveDossier $1)
     
    echo "$n"
    Et voici les erreurs que j'obtiens lorsque je teste mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    find: impossible de chercher "": Aucun fichier ou dossier de ce type
    find: impossible de chercher "": Aucun fichier ou dossier de ce type
    find: impossible de chercher "": Aucun fichier ou dossier de ce type
    Si vous avez des idées, n'hésitez pas :p Ou bien si vous avez un autre moyen pour le faire.

    Merci d'avance

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

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

    tout cela ne semble pas vraiment utile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$1" -mindepth 1 -maxdepth 1 -type f -name 'config' -printf '%h\n'
    et hop !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    tout cela ne semble pas vraiment utile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$1" -mindepth 1 -maxdepth 1 -type f -name 'config' -printf '%h\n'
    et hop !
    Salut,

    le problème c'est que quand je fais un find je récupère tout les dossiers qui contiennent le fichier config. Même les sous-répertoires d'un répertoire qui contient le fichier config. Alors que je ne veux pas avoir ces sous-répertoires. En ce qui concerne la fonction verfiDossier, elle contiendra d'autre vérification : présence d'autres fichiers, bon formatage de certains d'entre eux, etc ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    quand je fais un find je récupère tout les dossiers qui contiennent le fichier config.[...]Alors que je ne veux pas avoir ces sous-répertoires.
    et quelle est la règle à appliquer ?

    présente-nous ta hiérarchie de dossiers/fichiers, et le résultat correspondant, que tu souhaites obtenir.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    Ton erreur est sur la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabTemp=$(rechercheRecursiveDossier "$repertoire")
    A aucun moment tu initialises la variable repertoire.

    Mais, N_BaH à raison, tu fais trop compliqué et cela risque d'être lent.

    Peux-tu donner un exemple de ce que tu veux obtenir comme liste et ce que te reourne comme liste la commande find que tu ne désire pas ?
    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabTemp=$(rechercheRecursiveDossier "$repertoire")
    A aucun moment tu initialises la variable repertoire.
    Bonjour
    Oui, je pense que ici il faut mettre la variable "$line"...

    Citation Envoyé par disedorgue Voir le message
    Peux-tu donner un exemple de ce que tu veux obtenir comme liste et ce que te reourne comme liste la commande find que tu ne désire pas ?
    D'après ce que j'ai compris, et surtout en lisant cette phrase "Même les sous-répertoires d'un répertoire qui contient le fichier config alors que je ne veux pas avoir ces sous-répertoires", je pense qu'avec une arborescence de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a
    |-- [-rw-r--r--]  a/config
    |-- [drwxr-xr-x]  a/x
    |   `-- [-rw-r--r--]  a/x/config
    |-- [drwxr-xr-x]  a/y
    |   `-- [-rw-r--r--]  a/y/config
    `-- [drwxr-xr-x]  a/z
        -- [drwxr-xr-x]  a/z/a
        |   `-- [-rw-r--r--]  a/z/a/config
        `-- [-rw-r--r--]  a/z/config
    Si le fichier "config" est trouvé dans un dossier (exemple a/config), alors il n'est plus recherché dans les sous-dossiers de "a" (donc ni dans a/x, ni dans a/y ni dans a/z)...

    Si c'est ça alors le code ci-dessous fait ce qui est demandé

    Code bash : 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
     #!/bin/bash
     
    rechercheRecursiveDossier()
    {	 
    	for f in "$1"/*; do
    		if verifDossier "$f" ;then
    			echo "$f"
    			return
    		fi
    	done
    	for f in "$1"/*; do
    		test ! -d "$f" && continue
    		res=$(rechercheRecursiveDossier "$f")
    		if test -n "$res"; then
    			echo "$res"
    			return
    		fi
    	done
     
    	echo ""
    }
     
    verifDossier()
    {
    	[ -f "$1" ] && return 0 || return 1
    }
     
    rechercheRecursiveDossier $1
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

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

    Comme d'habitude, chacun réagira selon son optique:
    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
    $ mkdir a
    $ mkdir a/x a/y a/z
    $ mkdir a/z/a
    $ >a/config
    $ >a/x/config
    $ >a/y/config
    $ >a/z/config
    $ >a/z/a/config
    $ find a -name "config"
    a/y/config
    a/config
    a/x/config
    a/z/config
    a/z/a/config
    $ find a -name "config"|sed 's@config@.*/.*@g;'
    a/y/.*/.*
    a/.*/.*
    a/x/.*/.*
    a/z/.*/.*
    a/z/a/.*/.*
    Et la commande qui déchire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep -v -f <(find a -name "config"|sed 's@config@.*/.*@g;') <(find a -name "config")
    a/config
    $
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Pour commencer merci à vous tous pour votre aide

    Voici le script de Sve@r que j'ai modifié et qui fonctionne comme je le voulais.

    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
     #!/bin/bash
     
    rechercheRecursiveDossier()
    { 
    	for f in "$1"/*; do
    		test ! -d "$f" && continue
    		if verifDossier "$f" ;then
    			echo "$f"
    		else
    			res=$(rechercheRecursiveDossier "$f")
    			if test -n "$res"; then
    				echo "$res"
    			fi
    		fi
    	done	
    	echo ""
    }
     
    verifDossier()
    {
    	[ -f "$1/config" ] && return 0 || return 1
    }
     
    n=$(rechercheRecursiveDossier $1)
     
    if test -n "$n"; then
    	for rep in "$n"; do
    		echo "$rep"
    	done
     
    fi
     
    exit
    Voici la hiérarchie du répertoire passé en paramètre :

    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
    dos
    |-- A
    |** |-- 1
    |**     |-- 1
    |**     |     |-- config
    |**     |     |-- name
    |**     |-- 2
    |**         |-- 1
    |**             |-- config
    |**             |-- name
    |-- B
    |** |-- 1
    |** |    |-- 1
    |** |          |-- 1
    |** |              |-- config
    |** |-- 2
    |** |-- config
    |-- C
        |-- 1
            |-- config
            |-- name
    Et le résultat obtenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dos/A/1/1
    dos/A/1/2/1
    dos/B
    dos/C/1
    Par contre, quand je fait mon "for rep in "$n"", il affiche la liste complète des répertoires qui ont été trouvés d'un seul coup. Comme si c'était une seule chaine de caractère. Comment est-ce que je peux les récupérer un par un ?

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Attention, ton code ne fonctionne pas si le fichier config se trouve à la racine de ton dossier. C'est pour ça que moi je faisais deux boucles distinctes: la première pour rechercher le fichier lui-même, et la seconde pour explorer l'arborescence fille.
    Ceci dit, une boucle pour vérifier un fichier était un peu idiot je le reconnais (soir, fatigue, etc...)

    Citation Envoyé par Phoenix89 Voir le message
    Par contre, quand je fait mon "for rep in "$n"", il affiche la liste complète des répertoires qui ont été trouvés d'un seul coup. Comme si c'était une seule chaine de caractère. Comment est-ce que je peux les récupérer un par un ?
    C'est parce que le for se cale sur l'espace pour découper ses éléments alors que chez-toi, les éléments sont séparés par un "\n" (fin de ligne)

    Faut alors utiliser un outil calé sur le "\n" => le read

    Ce qui me permet d'alléger encore ton code et de le rectifier pour qu'il intègre aussi le fichier config de la racine

    Code bash : 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
     #!/bin/bash
     
    rechercheRecursiveDossier()
    { 
    	if verifDossier "$1"; then
    		echo "$1"
    		return
    	fi
    	for f in "$1"/*; do
    		test -d "$f" && rechercheRecursiveDossier "$f"
    	done	
    }
     
    verifDossier()
    {
    	test -f "$1/config"
    }
     
    rechercheRecursiveDossier "$1" | while read rep
    do
    	echo "rep: $rep"
    done
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Par contre, quand je fait mon "for rep in "$n"", il affiche la liste complète des répertoires qui ont été trouvés d'un seul coup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ n="un seul mot"
    $ printf '%s\n' "$n"
    un seul mot
    $ printf '%s\n' $n
    un
    seul
    mot
    cependant, n devrait être un tableau, alimenté dans la fonction récursive.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    • C'est vrai, ça marche toujours.
      Pourquoi un script pour si peu?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      $ grep -v -f <(find dos -name "config"|sed 's@config@.*/.*@g;') <(find dos -name "config")|sed 's@/config$@@'
      dos/C/1
      dos/B
      dos/A/1/2/1
      dos/A/1/1
      Tu peux même ajouter |sort si tu trouves cela mal ordonné.
    • Tu devrais reprendre ce résultat et alimenter une boucle while read repertoire
    • Pour ta question, c'est facile: arrête de protéger $n par des guillemets et ça marchera. Enfin... sauf si tes fichiers 'dos' ont des espaces dans leurs noms.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    cependant, n devrait être un tableau, alimenté dans la fonction récursive.
    Ca dépend du besoin A-t-il besoin de traiter plusieurs fois la liste des dossiers ???

    Citation Envoyé par Flodelarab Voir le message
    Pourquoi un script pour si peu?
    Citation Envoyé par Phoenix89 Voir le message
    En ce qui concerne la fonction verfiDossier, elle contiendra d'autre vérification : présence d'autres fichiers, bon formatage de certains d'entre eux, etc ...
    Pour ça !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    un tableau permettra de préserver les noms de fichiers contenant des espaces, ou autres contenus dans l'IFS, alors qu'une variable, sans guillemets, ne le fera pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Code recursDir : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    shopt -s globstar nullglob
    declare -A okDirs
     
    for f in dos/**
    do
       if test -f "$f/config"
       then
          test -z "${okDirs[${f%/*}]}" && { okDirs[$f]=1; echo "$f";} || continue
       fi  
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./recursDir
    dos/A/1/1
    dos/A/1/2/1
    dos/B
    dos/C/1
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code recursDir : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    shopt -s globstar nullglob
    declare -A okDirs
     
    for f in dos/**
    do
       if test -f "$f/config"
       then
          test -z "${okDirs[${f%/*}]}" && { okDirs[$f]=1; echo "$f";} || continue
       fi  
    done
    Ne fonctionne pas si "config" se trouve à la racine de "dos" (en fait affiche "dos" oui mais continue quand-même la recherche dans son arborescence fille)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    on peut conditionner l'exécution de la boucle à la non-existence de ce fichier à la "racine".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    on peut conditionner l'exécution de la boucle à la non-existence de ce fichier à la "racine".
    Oui, on peut mais perso j'aime pas les cas particuliers. Comme les physiciens, je cherche toujours à uniformiser mes algos pour qu'ils englobent tous les cas. Je pense que ça fait gagner en "évolutivité"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    c'est pourtant parce que tu testes l'existence du fichier avant d'entrer dans la boucle que ton code fonctionne...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Oui mais ce test est le même à chaque nouveau sous-dossier traité. Je considère donc que mon algo est "général" (tout dossier quel qu'il soit est toujours traité de la même façon, y compris le tout premier) et non un cas "particulier" (vérifier d'une part la racine initiale avant de lui appliquer ou ne pas lui appliquer ensuite le reste de l'algo)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    oui, tu as raison.
    en plus, mon astuce de comparer l'existence dans le tableau du répertoire immédiatement supérieur ne permet pas de retourner le résultat attendu, car bash explore les répertoires avant de montrer les fichiers.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Aide pour une fonction récursive.
    Par fred61 dans le forum Débuter
    Réponses: 13
    Dernier message: 21/01/2015, 08h39
  2. Réponses: 3
    Dernier message: 30/05/2014, 22h04
  3. Recherche de l'aide pour une Fonction OptionButton
    Par Au2laDeNosReves dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2009, 21h59
  4. Réponses: 2
    Dernier message: 17/06/2008, 12h08
  5. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40

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