[linux-l] xargs input name

Steffen Dettmer steffen at dett.de
Di Apr 8 10:19:28 CEST 2003


* Baerwaldt, Ralf wrote on Mon, Apr 07, 2003 at 13:08 +0200:
> > find . -type f -print0 | xargs --null sed -e "s/hda3/hda1/g"

BTW, das sed in perl:

perl -e "s/hda3/hda1/g"

sieht für mich sehr ähnlich auch :-)
 
> export TP=/tmp/losch.$$
> find . -type f -print0 |
>   xargs --null -n 1 -i+ bash -c "cp '+' $TP; \
> 	 sed -e 's/hda3/hda1/g' <$TP >$TP.1 && cp $TP.1 '+' "

Das ändert nicht die Namen der Dateien in der Liste, sondern ist
eine extrem ineffiziente "Umbenennung", soweit ich sehe.

Was genau sollte eigenlich gemacht werden? IN allen Dateien was
ersetzen, steht da. Da würde ich sowas bauen wie:

find . -type f -print0 \
	| xargs --null \
	perl -npi -e 's/ich bin ein test/ICH BIN EIN TEST/g'

Perl kennt das "in-place" Konzept. Bei sed müßte man das erst in
eine Temp-Datei schreiben, und die dann moven, wenn kein Fehler.
Bei -i (in-place) kann man noch eine Backuperweiterung anhängen
(-ibak). Der Perlaufruf zeigt aber prima, wie flexibel und
optimiert Perl so ist :-)

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l