Remplacements dans tout un répertoire

Le
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.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Lefevre
Le #123692
Dans l'article mpg
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 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

mpg
Le #123691
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.

Stephane Chazelas
Le #123689
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

Publicité
Poster une réponse
Anonyme