Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

find + exec + pipe

5 réponses
Avatar
FLUX (a l'Ircam)
Bonjour,

j'essaye de remplacer toutes les occurences de la chaine "com.ibm.tools"
par "eclipse.org.gef", et ce de maniere recursive pour tous les fichiers
sources java qui se situent a partir du repertoire courant.

J'ai essaye ce qui suit:

find ./ -name *.java -exec cat {} \| sed s/com.ibm.tools/eclipse.org.gef/g =
> {} \;

Le probleme, c'est que l'interpreteur de commande n'interprete pas
convenablement le | :

cat: |: Aucun fichier ou r=C3=A9pertoire de ce type
cat: sed: Aucun fichier ou r=C3=A9pertoire de ce type
cat: s/com.ibm.tools/eclipse.org.gef/g: Aucun fichier ou r=C3=A9pertoire de=
ce type

Et si je retire le \ devant \|, j'ai l'erreur suivante :

find: Param=C3=A8tre manquant pour `-exec'
sed: impossible de lire ;: Aucun fichier ou r=C3=A9pertoire de ce type

Quelqu'un a une idee?

Flux


--=20
"Pour moi la programmation est plus qu'un art applique important. C'est
aussi une ambitieuse quete menee dans les trefonds de la connaissance"
Grace Hopper, inventeur du compilateur

5 réponses

Avatar
DINH Viêt Hoà

Bonjour,


Bonjour,

il faudra régler un petit peu ton lecteur de news.
Tu écris en UTF-8 et tu es déclaré en iso-8859-1

j'essaye de remplacer toutes les occurences de la chaine "com.ibm.tools"
par "eclipse.org.gef", et ce de maniere recursive pour tous les fichiers
sources java qui se situent a partir du repertoire courant.

J'ai essaye ce qui suit:

find ./ -name *.java -exec cat {} | sed s/com.ibm.tools/eclipse.org.gef/g > {} ;


tout ce que tu risques en faisant cela, c'est perdre ton fichier source,
la chose à faire habituellement, c'est ceci :

find . -name '*.java' | while read filename ; do
mv $filename $filename.tmp
sed -e 's/com.ibm.tools/eclipse.org.gef/g' < $filename.tmp > $filename
done

(pas testé //clindoeil)

--
DINH V. Hoa,

etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan

Avatar
FLUX (a l'Ircam)
il faudra regler un petit peu ton lecteur de news.
Tu écris en UTF-8 et tu es déclaré en iso-8859-1


Ca ne vient pas de mon lecteur de news : j'ai copier/coller
depuis une console sur une machine avec UTF-8 dans une console ssh sur une
autre machine (sans UTF-8). Je n'ai pas fait attention, desole...

j'essaye de remplacer toutes les occurences de la chaine "com.ibm.tools "
par "eclipse.org.gef", et ce de maniere recursive pour tous les fichier s
sources java qui se situent a partir du repertoire courant.

J'ai essaye ce qui suit:

find ./ -name *.java -exec cat {} | sed s/com.ibm.tools/eclipse.org.ge f/g > {} ;


tout ce que tu risques en faisant cela, c'est perdre ton fichier source,
la chose a faire habituellement, c'est ceci :

find . -name '*.java' | while read filename ; do
mv $filename $filename.tmp
sed -e 's/com.ibm.tools/eclipse.org.gef/g' < $filename.tmp > $filen ame
done

(pas teste //clindoeil)


Et pourtant ca marche!! Merci!

Flux

--
"Pour moi la programmation est plus qu'un art applique important. C'est
aussi une ambitieuse quete menee dans les trefonds de la connaissance"
Grace Hopper, inventeur du compilateur


Avatar
Erwan Arzur

find . -name '*.java' | while read filename ; do
mv $filename $filename.tmp
sed -e 's/com.ibm.tools/eclipse.org.gef/g' < $filename.tmp > $filename
done

La meilleur façon de marcher c'est encore la notre :



find . -name '*.java' | xargs perl -pi -e
"s/com.ibm.tools/eclipse.org.gef/g"

perl c'est tellement fort, parfois ... :-)


Avatar
Stephane CHAZELAS
2003-12-9, 16:57(+01), DINH Viêt Hoà:
[...]
find ./ -name *.java -exec cat {} | sed s/com.ibm.tools/eclipse.org.gef/g > {} ;


tout ce que tu risques en faisant cela, c'est perdre ton fichier source,


Bof, tout ce qu'il risque, c'est créer un fichier '{}'.

la chose à faire habituellement, c'est ceci :

find . -name '*.java' | while read filename ; do
mv $filename $filename.tmp
sed -e 's/com.ibm.tools/eclipse.org.gef/g' < $filename.tmp > $filename
done


Surtout pas !

perl -pi.bak -e 's/com.ibm.toolE/eclipse.org.gef/g' ./**/*.java(.)

ou, si on n'a pas zsh:

perl -MFile::Find -pi.bak -e'BEGIN{find sub{
,$File::Find::name if -f&&/.java$/},"."}
s/com.ibm.toolE/eclipse.org.gef/g'

(pas testé non-plus).

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Etienne PIERRE
On mar, 09 déc 2003, Erwan Arzur wrote:
find . -name '*.java' | while read filename ; do
mv $filename $filename.tmp
sed -e 's/com.ibm.tools/eclipse.org.gef/g' < $filename.tmp > $filename
done

La meilleur façon de marcher c'est encore la notre :



find . -name '*.java' | xargs perl -pi -e
"s/com.ibm.tools/eclipse.org.gef/g"



En même temps on peut le faire aussi avec sed (en tout cas avec GNU sed)

find . -name '*.java' |
xargs sed -i -e 's/com.ibm.tools/eclipse.org.gef/g'


Et on peut même garder un backup :

find . -name '*.java' |
xargs sed -i~ -e 's/com.ibm.tools/eclipse.org.gef/g'


Etienne

--
Etienne PIERRE "etienne.pierre" at "tuxfamily.org"