echo et soucis d'optimisation
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:
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:
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:
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.