Bonjour,

Le 15 Jul, Francois Cerbelle a �crit:
> Le Mon, Jul 15, 2002 at 01:28:59PM +0200, xerxas ecrit :
>> On Mon, Jul 15, 2002 at 01:11:29PM +0200, Philippe wrote:
>> > Bonjour,
>> > voici ma question :
>> > j'ai une ip a changer ds plusieurs centaines de fichiers dans des
>> > sous repertoires & repertoires.. quelqu'un a une id�e d'un petit
>> > script ou d'une petite commande, qui pourrait remplacer une chaine
>> > par une autre ? du genre
>> > : remplace fichier toto titi ? histoire que je puisses le lancer
>> > avec un find ....
>> > Merci d'avance ..
>> > Philippe
>> for i in * ; do cat $i | sed 's/127\.0\.0\.1/10.0.0.2/' >> $i.2 ;
>> done ; et ensuite mmv ( multimove, ou for i in * ; do mv $i `basename
>> $i` ; done  ).
>> Voila, je pense que c'est une solution viable.
> Tu oublies les sous-repertoires, et par pr�caution, j'ajouterais
> l'extension � supprimer dans les parametres du basename :
> for i in `find . -type f` ; do cat $i | sed 's/127\.0\.0\.1/10.0.0.2/'
> > $i.2 ; done ; for i in `find . -type f -name *.2` ; do mv $i
> `basename $i .2` ;
> 
> Sur les traitements par lots de ce genre, je pr�f�re mettre quelques
> s�curit�s ! :-)
> 
C'est un concours ? j'en ai une version aussi ;-) En et plus faut pas
oublier le flag g de sed, des fois �a sert... Pour ma d�fense je
voudrais dire que ce qui suit n'est pas inutilement compliqu�. Avec un
fifo on peut faire ce genre de truc sur des milliards de fichiers, pas
avec ``. Avec cat >fichier_original, on est certain de conserver l'inode
et donc tous les droits du fichier original, pas avec mv. Faut toujours
pr�voir un parachute, �a cree donc des fichiers .sauvegarde-nomoriginal.
Le resultat des modifs est dans /tmp/resultat. faut pas mettre le script
dans le r�pertoire courant.

        Christophe

-- 
char*p="[)1++++++11+(QI1)9191991)9)1)(II1)919Y91)9)1)(AK+9;991+3*(9I1*IY991)Q1\
)(1I1))A91991)Q1)(+)1)1++9;)Q1+(";main(_){while(*p){for(_=*p-32>>3;_;--_)
putchar(' ');if(!(_=*p++-32&7))putchar('\n');else while(_--)printf("_/");}}
#! /bin/sh

exec 3>/tmp/resultat
trap "rm -f /tmp/monfifo.$$ /tmp/toto.$$" 0

rm -f /tmp/toto.$$ || exit 1
mkfifo /tmp/monfifo.$$ || exit 1
find . ! -name '.sauvegarde-*' -type f >/tmp/monfifo.$$ &
oifs="$IFS"
IFS='
'
# sleep n�cessaire
sleep 2
while read i
do
        IFS="$oifs"
        echo -n "$i" >&3
        sed -e 's/127\.0\.0\.1/10.0.0.2/g' <"$i" >/tmp/toto.$$
        if ! cmp /tmp/toto.$$ "$i" >/dev/null 2>&1
        then
                echo '  modif' >&3
                cp "$i" "${i%/*}/.sauvegarde-${i##*/}"
                cat /tmp/toto.$$ >"$i"
        else
                echo '  non_modif' >&3
        fi
done </tmp/monfifo.$$
IFS="$oifs"

Répondre à