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

Répondre à