Accéder au contenu.
Menu Sympa

linux-31 - Re: [Linux-31] tester sed

Objet : Discussions sur le logiciel libre

Archives de la liste

Re: [Linux-31] tester sed


Chronologique Discussions 
  • From: Sébastien <sebastien AT migniot.com>
  • To: "jdd AT dodin.org" <jdd AT dodin.org>
  • Cc: linux-31 AT culte.org
  • Subject: Re: [Linux-31] tester sed
  • Date: Mon, 24 Sep 2018 13:54:15 +0200

C’est parti pour un peu de bash-foo :

mkdir -p /tmp/testdir && for i in $(grep -lire toto .); do( j=`sed 's/^/\/tmp\/testdir\//' "$i"`; cat "$i" | sed 's/toto/XXXX/g' > "$j"; ); done

La ligne ci-dessus :
  • Crée un répertoire /tmp/testdir
  • Repère chaque fichier avec grep -lire
  • Pour chacun, crée un clone déjà modifié avec cat | sed >
  • Et donc produit dans /tmp/testdir/path/to/file.txt le fichier transformé de ./path/to/file.txt

Pour finir la transformation : 
  • Soit faire un rsync de /tmp/testdir vers .
  • Soit rajouter un && cp "$j" "$i"

mkdir -p /tmp/testdir && for i in $(grep -lire toto .); do( j=`sed 's/^/\/tmp\/testdir\//' "$i"`; cat $i | sed 's/toto/tutu/g' > $j && cp "$j" "$i" ); done

Evidemment on ne saurait que trop recommander de sauvegarder les données avant :
tar cvfz /path/to/SAVE.tar.gz . # par exemple

 S.


PS: attention, il faut contrôler et éviter que les noms de fichier ne contiennent des espaces, des quote et des double-quote (Dans ce cas, répondre à la liste, la ligne sera un peu plus longue :) )
PS2: le type de quote dans la question initiale est ' - 4
PS3: Si le nombre de fichiers est *vraiment* trop grand, il faudra batcher - pareil, si la sauvegarde et/ou /tmp/testdir ne tiennent pas sur 1To, répondre à la liste et je verrai si je peux relever le challenge un peu +



Le 24 sept. 2018 à 10:37, jdd AT dodin.org (via linux-31 Mailing List) <linux-31 AT culte.org> a écrit :

Bonjour,

Je voudrais modifier un grand nombre de fichiers sur le site web du CULTe (archives mails) à ,la demande d'un ancien adhérent qui voudrait devenir anonyme.

grep -lir toto .

me donne la liste

sed -i `s/toto/XXXX/g`

devrait faire le remplacement (mais quel type de quotes, ' - 4 ou ` - 7)

mais il est très pénible de faire une copie de sauvegarde des mails, sauvegardés un par un et donc des milliers de fichiers, mais je ne voudrais pas détruire nos archives bêtement :-(

donc

1) comment écrire la ligne complète?
2) comment faire un "dry run", soit un test qui me liste les modifications sans les faire (-n dans rsync)

merci
jdd

--
http://dodin.org




Archives gérées par MHonArc 2.6.19+.

Haut de le page