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)
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!!!
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
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)
ma fonction getFiles me renvoi les sons situés dans des répertoires.
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
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:
Je trouve ça dingue, ça met 1 seconde à s'exécuter maintenant.
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 garde ma question qui poura surement servir, et pour échanges.
Partager