views:

37

answers:

1

Is there an alternative way to do the following one-liner replacement of text across all files in a Rails app?

perl -pi -e 's/replaceme/thereplacement/g' $(find . -type f)

Perl complains that there are too many files if I include the RAILS_ROOT, but it works for subdirectories.

+1  A: 

I typically use the following to do batch replacement -- e.g. replace all instances of "SomethingOld" with "SomethingNew". The -Z option to grep and the pipe to xargs with the -0 option are necessary for this to work on filenames with spaces.

grep -rlZ 'SomethingOld' * | xargs -0 sed -i '' -e 's/SomethingOld/SomethingNew/g'

Run it from the "root" directory you want to perform the batch replacement in and it will recursively move through all subdirectories. Be warned that this does in-line replacement, so make a backup of the original data first.

Segphault