Objet : Discussions sur le logiciel libre
Archives de la liste
- 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
- [Linux-31] tester sed, jdd AT dodin.org, 24/09/2018
- Re: [Linux-31] tester sed, Sébastien, 24/09/2018
- Re: [Linux-31] tester sed, jpcas, 24/09/2018
- Re: [Linux-31] tester sed, jdanield, 24/09/2018
- Re: [Linux-31] tester sed, jpcas, 24/09/2018
- Re: [Linux-31] tester sed, jdanield, 24/09/2018
- Re: [Linux-31] tester sed, jpcas, 24/09/2018
- Re: [Linux-31] tester sed, jdanield, 24/09/2018
- Re: [Linux-31] tester sed, jpcas, 24/09/2018
- Re: [Linux-31] tester sed, jdanield, 24/09/2018
- Re: [Linux-31] tester sed, jpcas, 24/09/2018
- Re: [Linux-31] tester sed, jdanield, 24/09/2018
Archives gérées par MHonArc 2.6.19+.