|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2009 Messages : 65 ![]() |
Bonjour,
je souhaite remplacer dans un ensemble de fichiers une chaine de caractère (un chemin d'accès) par une autre chaine (un autre chemin). Je suis arrivé à cette solution à base de find/sed/redirection : Code :
find . -type f -name *.pbxproj -exec sh -c 'sed "s|my/old/path|my/new/path|" < {} > {}' \; Si je change la redirection > {} par > {}.new par exemple, alors j'ai bien mes modifications souhaitées dans les fichiers .new, mais je souhaite avoir ces modifications dans les fichiers originaux. Ou est-ce que je rate un truc ? En vous remerciant |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
est-ce que le sed sur ton système dispose de l'option --in-place ? sinon, utilise mv pour écraser les originaux avec {}.new ... ? j'aurais mis ma main au feu que sh n'aurais pas su ce qu'est {}, et jaurais perdu |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Si l'option "--in-place" existe, alors : Code :
find . -type f -name *.pbxproj -exec sed -i.bak "s|my/old/path|my/new/path|" {} \;
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juillet 2008 Messages : 174 ![]() |
Bonjour,
Plutôt que l'option -exec de find qui crée un nouveau process pour chaque fichier, tu peux utiliser xargs. Code :
find . -type f -name *.pbxproj | xargs sed -i.bak "s|my/old/path|my/new/path|" Code :
find . -type f -name *.pbxproj -print0 | xargs -0 sed -i.bak "s|my/old/path|my/new/path|" |
|
|
00
|
|
|
#5 | |
|
Membre du Club
![]() Inscription : février 2009 Messages : 65 ![]() |
Citation:
Cette solution fonctionne très bien, donc je suppose que l'option --in-place est disponible sur mon système (OS X). Merci beaucoup |
|
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
Comment peut-on mettre cette affirmation en évidence, stp ? edit : ah ? man find /-exec Citation:
Code :
find . -type f -name *.pbxproj -exec sed -si.bak "s|my/old/path|my/new/path|" {} + |
||
|
|
10
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
Copyright © 2000-2012 - www.developpez.com