[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: remplacement occurence dans plusieurs fichiers



Metaone wrote:

Wallace wrote:

Bonjour,
J'ai deplace une gallery photo faite avec Gallery, mais cette derniere ne marche plus
car dans beaucoup de fichiers sont mis en dur le pwd de la photo.
Il est impossible de faire le remplacement de ce chemin a la main un simple grep donne plusieurs centaines de resultats.

Quelle commande utiliser pour lui passer la chaine existante ex /home/toto/gallery/ , celle que l'on veut mettre en remplacement /home/sites/toto/gallery/ et un repertoire a parcourir en recursif?

Merci par avance



A tester avant de faire la commande !!! :

$cd <rep>

$ echo 'cat "$1" | sed "s/\/home\/toto\/gallery\//\/home\/sites\/toto\/gallery\//g" > "$1"' > cmd
$ chmod +x cmd
$ find . -type f -exec ./cmd {} \;

N'est-il pas plus simple de faire un for?
for i in `find . -f type f -print`; do cp $i $i.sed; sed "s/\/home\/toto\/gallery\//\/home\/sites\/toto\/gallery\//g" $i.sed > $i; rm $i; done




explications:
1- on crée un petit script shell qui contient la commande:

cat "$1" | sed "s/\/home\/toto\/gallery\//\/home\/sites\/toto\/gallery\//g" > "$1"

$1 étant le premier argument de la commande (donc ici, un nom de fichier).

sed s/toto/foo/g : remplace toutes les occurences de toto par foo (le g c'est pour remplacer toutes les occurences sur une même ligne, sans le g il ne remplacera que la premiere occurence de chaque ligne)

et on redirige toute ca dans le fichier.

Si tu veux savoir quel fichier est en cours de traitement,
ajoute un echo :
$cat cmd
echo -n $1 ...
cat "$1" | sed "s/\/home\/toto\/gallery\//\/home\/sites\/toto\/gallery\//g" > "$1"
echo Done.
$

2- on donne les droits d'execution sur le script
3-- pour chaque fichier de l'arborescence on execute la commande (man find).

Voilou, bonne chance

    Metaone.
ps: fais une copie du site et lance la commande SUR LA COPIE




--
Andreï V. FOMITCHEV             [Quand faut-il arrêter l'informatique]
Software R&D Engineer  [Lorsque, dans un kilo, on trouve 1024 grammes]
Odixion SAS, FRANCE





Reply to: