On Sun, Nov 14, 2004 at 07:42:38PM +0100, J.Pierre Pourrez wrote: > Le script est execut� une fois par semaine, le fichier de 14000 lignes > est cr�� � chaque fois et correspond aux 14000 paquets de la Sarge.
Optimiser un script qui prend 5 minutes � s'executer toutes les semaines n'est pas une bonne utilisation de son temps :) Je vois au moins un changement � faire: > # recenser tous les noms de fichiers des paquets dans Packages > for PACKAGE in `find $DISTS_DIR -name Packages`; do > grep $MOTIF $PACKAGE | sed "s!$MOTIF!$HOST/!" >> $TMPFILE > done > # on trie tous les noms de fichiers r�cup�r�s > mv $TMPFILE $TMPFILE.orig > cat $TMPFILE.orig | sort > $TMPFILE > rm $TMPFILE.orig Je remplacerai tout �a par: cat `find $DISTS_DIR -name Packages` | grep $MOTIF | sed "s!$MOTIF!$HOST/!" | sort > $TMPFILE (�a marche les points d'exclamation? Mon shell n'a pas l'air content avec �a...) > # on supprime les paquets non recens�s > # �ventuellement utiliser l'option -m de grep pour arr�ter > # la recherche � la premi�re occurence > for FICHIER in `find $HOST -name "*.deb"`; do > if [ `grep -c $FICHIER $TMPFILE` = "0" ]; then > echo "Remove $FICHIER" > rm -f $FICHIER > COUNT=$(($COUNT+1)) > fi > done Ok, c'est donc la partie dont tu parlais � l'origine. Je n'ai pas d'id�e �vidente; une solution serait de construire un script sed qui efface les lignes contenues dans $TMPFILE, et l'appliquer � la sortie du find, donc qqch du genre: sed -e "s/\//\\\\\//g" -e "s!\(.*\)!/\1/d!" $TMPFILE > $TMPFILE2 (pour se retrouver dans $TMPFILE2 avec des lignes du genre: /\/var\/lib\/apt-proxy\/blahblah.deb/d /\/var\/lib\/apt-proxy\/foobar.deb/d ... Puis: find $HOST -name "*.deb" | sed -f $TMPFILE2 (on peut alors retirer le `sort` de l'expression du haut, il ne sert plus). Selon l'impl�mentation de sed (et si sed arrive � g�rer 14000 lignes de script...), �a peut �tre ou ne pas �tre plus rapide que ta solution. Y.

