Metaone a �crit, mercredi 26 novembre 2003, � 09:13 :
> Wallace wrote:
> >Bonjour,
bonjour.
> > [d�placement de gallery]
>
> A tester avant de faire la commande !!! :
[...]
> 1- on cr�e un petit script shell qui contient la commande:
>
> cat "$1" | sed
Laisse dormir le chat, � cat "$1" | sed � == � <"$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).
$1 ouvert en �criture pour sed �crasera la version pr�c�dente lue par
cat ... avec sed v.3, il faut passer par un fichier temporaire :
mv fichier fichier.orig && sed -e 'modifs' <fichier.orig >fichier
Sed version 4 (il y a un backport pour woody sur www.backports.org ou
via www.apt-get.org [1]) dispose de l'option -i de Perl :
sed -i.orig -e '<modifs>' fichier
ou idem avec perl, mais
$ ls -l $(which sed perl)
33544 oct 26 17:01 /bin/sed
774947 ao� 10 03:19 /usr/bin/perl
> 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)
ici, sed 's!avant!apr�s!g' serait plus lisible sans \/
[...]
> 3-- pour chaque fichier de l'arborescence on execute la commande (man find).
> $ find . -type f -exec ./cmd {} \;
a/ Ce truc-l� va s'attaquer � *tous* les fichiers ordinaires, y compris
les photos ; les *.jpeg peuvent
- �tre gros ;
- contenir des noms de fichier dans le champ EXIF ...
il faudrait donc rajouter l'option find � -name '*.html' �.
b/ Find lance une commande par fichier.
un truc du genre :
sed -i.orig -e 's!avant!apr�s!g' *.html
devrait d�j� traiter d'un seul coup les fichiers utiles du r�pertoire
courant.
Pour le c�t� r�cursif, le shell zsh le permet directement dans la
commande pr�c�dente, apt-get install zsh-doc [2].
Sinon, il faudrait �crire le script perl correspondant, ou jouer avec
les options de find,
find repert -type d -exec sh -c "sed -i.orig -e '<modifs>' {}/*.html" \;
Essaie avec � echo sed ... � d'abord.
> ps: fais une copie du site et lance la commande SUR LA COPIE
Oui.
Notes :
[1], [2] : comme �a je suis en charte ;)
--
Jacques L'helgoualc'h