I think this is also correct:

find . -name '*.htm' -exec cp '{}' '{}'.new \; \
-exec sed -i s/old/new/ '{}'.new \;



Hannah Schroeter wrote:
Hello!

On Mon, Jun 04, 2007 at 02:01:12PM +0200, Marc Espie wrote:
[...]

Don't use for loops with find results, they do not scale well.
Also, beware of spaces in file.

For this kind of thing, I generally use 'while read'

find . -type f -name \*.htm -print|while read f; do sed s/old/new <"$f" 
>"$f.new"; done

This isn't safe wrt newlines in file names, either.

A completely safe solution would be writing a small script:

#! /bin/sh
exec sed s/old/new/ < "$1" > "$1".new

and using find . -type f -name \*.htm -exec /path/to/script {} \;
or find . -type f -name \*.htm -print0 | xargs -0 -L 1 -r /path/to/script

Kind regards,

Hannah.

Reply via email to