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

Remplacements dans tout un répertoire

3 réponses
Avatar
mpg
Bonjour,

Je sus désolé car je sais bien que c'est une FAQ, mais je n'arrive pas à
retrouver... J'ai un répertoire qui contient pas mal de fichiers, dans
lesquels j'aimerais effectuer des substitutions.

Je ne sais pas comment utiliser sed (ou perl ou autre) de façon à prendre en
entrée récursivement tous les fichiers du répertoire et à ré-écrire chaque
fichier sur lui-même en sortie...

Merci d'avance pour vos idées.

Manuel.

3 réponses

Avatar
Vincent Lefevre
Dans l'article <flo04u$2vs8$,
mpg écrit:

Je ne sais pas comment utiliser sed (ou perl ou autre) de façon à
prendre en entrée récursivement tous les fichiers du répertoire et à
ré-écrire chaque fichier sur lui-même en sortie...


Le plus simple pour récupérer récursivement tous les fichiers (s'il
n'y en a pas trop au point de dépasser les limites de ton système):
**/*(^/) en zsh, et si tu as besoin aussi des fichiers et répertoires
qui commencent par un point: **/*(D^/)

Sinon, il y a find + éventuellement xargs.

Pour la réécriture d'un fichier sur lui-même, tu as l'option -i de
Perl (tu peux également demander un backup de l'ancien fichier, au
cas où), cf les pages man...

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
mpg
Le (on) samedi 05 janvier 2008 14:32, Vincent Lefevre a écrit (wrote) :

Le plus simple pour récupérer récursivement tous les fichiers (s'il
n'y en a pas trop au point de dépasser les limites de ton système):
**/*(^/) en zsh, et si tu as besoin aussi des fichiers et répertoires
qui commencent par un point: **/*(D^/)

J'y avais pensé, mais je ne connaissais pas (^/) et ça m'embêtait d'attraper

aussi les répertoires.

Sinon, il y a find + éventuellement xargs.

C'est ce que j'essayais, mais j'ai du me mélanger dans la ligne de commande

sed, parce que ça faisait des trucs bizarres...

Pour la réécriture d'un fichier sur lui-même, tu as l'option -i de
Perl (tu peux également demander un backup de l'ancien fichier, au
cas où), cf les pages man...

En l'occurrence, j'avais déjà fait un backup de l'arborescence pour être

tranquille. Cette option -i de perl est visiblement exactement ce que je
cherchais. Merci pour l'info (je ne suis pas encore très familier avec perl
et n'avais donc pas bien cherché de ce côté).

En fait, la réécriture d'un fichier sur lui-même est un problème que je
rencontre souvent, et à chaque fois je ne sais pas faire mieux que je
passer par un fichier intermédiaire, ce que je trouve assez lourd...

Manuel.

Avatar
Stephane Chazelas
On Sat, 05 Jan 2008 14:19:26 +0100, mpg wrote:
Bonjour,

Je sus désolé car je sais bien que c'est une FAQ, mais je n'arrive pas à
retrouver... J'ai un répertoire qui contient pas mal de fichiers, dans
lesquels j'aimerais effectuer des substitutions.

Je ne sais pas comment utiliser sed (ou perl ou autre) de façon à prendre en
entrée récursivement tous les fichiers du répertoire et à ré-écrire chaque
fichier sur lui-même en sortie...
[...]


Avec les outils GNU:

grep -rlZ pattern . | xargs -r0 sed -i -e 's/pattern/replacement/g'

--
Stephane