(Courriels de diversion: <dîneront@pechiez-reviseront.com> <corne@construisiez-framboisier.com> <venus@imbrications-sherifs.com> <maîtriserez@giflaient-rationaliseras.com> <rougirent@consonance-recyclages.com> <faible@escrimeurs-retrocederai.com> <repeteraient@sous-paient-deracina.com> <intercedant@intra-communautaire-escarcelles.com> <mercantis@pleut-apraxie.com> <greveras@braviez-eduques.com> )


>>>>> "ap" == Ant-1  <ant-1@ws-interactive.fr> writes:
  ap> Pourquoi quand je fais :
  ap> 
  ap> find . -name "*.php" -exec sed 's/chaine1/chaine2/' {} > {}.new \;
  ap> 
  ap> Ca me mets tous mes fichiers trouvés avec find avec chaine1 remplacée
  ap> par chaine2 dans un seul fichier qui s'appelle {}.new au lieu de me
  ap> mettre chaque fichier avec le remplacement effectué dans son propre
  ap> fichier .new ?

par ce que -exec fait un exec() du programme avec ces arguments; il
n'y a pas de shell pour gérer le redirection (ou plutôt elle est faite
par le shell d'origine).

À la place utiliser

  find . -name "*.php" -exec sh -c "sed s/foo/bar/ {} > {}.new" \;

ou plus simple

  find . -name "*.php" -print0 | xargs -0 perl -pi.new -e s/foo/bar/

où si on vire le .new les fichiers d'origine sont modifiés.

-- 
Eric Marsden                          <URL:http://www.laas.fr/~emarsden/>

---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@CULTe.org>Le CULTe sur le web: <URL:http://www.CULTe.org/>