Salut, encore moi.
Je viens de me rendre compte d'un truc con, le code suivant est parfois très long à s'executer:

Exemple (1)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
        for j in $tous_sonst
        do
                     	tous_sons=`$Echo "$tous_sons"; $Echo "$j"`
        done
En effet, lorsque ma variable $tous_sonst contient un grand nombre de lignes (2000 environs), cette simple boucle met plus d'une minute à s'executer!!!
Je trouve ça incroyable et j'aimerai savoir si je peux procéder autrement.

L'idée étant de récupérer une liste contenant des fichiers et répertoire dans $tous_sons (avec leur chemin complet), et entre do et done faire un traitement différent si $j est un répertoire ou un fichier sonore (j'ai enlevé cette partie du code dans l'exemple). Si c'est un répertoire je liste les sons situés dans ce répertoire, si c'est un son je le garde tel quel. Ensuite je souhaite récupérer le tout (les sons situés ou non dans des répertoires) dans ma variable $tous_sons:

Exemple (2)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
        for j in $tous_sonst   #liste initiale
        do
                # si le u_ renvoi un repertoire
                if [ -d "$j" ]
                then
			tous_sons=`echo "$tous_sons"; getFiles $jj`
                else
                     	tous_sons=`echo "$tous_sons"; echo "$j"`
               	fi
        done
 
echo "$tous_sons" #liste finale
ma fonction getFiles me renvoi les sons situés dans des répertoires.


Voilà ma question:
Si ma liste initiale contient 2000 lignes, le script met 2 minutes à s'exécuter, ce qui me parait disproportionné. C'est long à cause de cette ligne: tous_sons=`echo "$tous_sons"; echo "$j"`, comme j'en ai parlé dans l'exemple (1). Quelqu'un aurait il une idée pour que je récupère rapidement ma liste de sons.


En posant la question je viens de trouver une astuce:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
>fictmp
        for j in $tous_sonst   #liste initiale
        do
                # si le u_ renvoi un repertoire
                if [ -d "$j" ]
                then
			getFiles $jj >>fictmp
                else
                     	echo "$j" >>fictmp
               	fi
        done
 
cat fictmp #liste finale
Je trouve ça dingue, ça met 1 seconde à s'exécuter maintenant.

Je garde ma question qui poura surement servir, et pour échanges.