When addressing certain facts; that the OP did not specify what OS they are running (could be windoze, VMS or mac); that, even if it is unix or linux, files in hidden directories or called .anything.txt should probably be left alone (I believe files beginning with '~' for windows, although I don't do much windows) and also that for example find -print0 works on linux but not unix; a short script instead of a one liner would become necessary, perhaps this:
# a unix/linux version:
Traverse('./');
sub Traverse{
my $dir = shift;
opendir my $dh, $dir or die "$!, for $dir";
for my $file ( grep !/^\./, readdir $dir ) { # but adjust for OS
my $path = "$dir/$file";
if ( -d $path ) {
Traverse( $path );
}
else {
( $file =~ /\.txt$/ ) and Process( $path );
# or for VMS /\.TXT\;\d+$/
}
}
closedir $dh;
}
sub Process{
my $file = shift;
open my $fh "<$file" or die "$!, for $file";
my @updated = ();
while( <$fh> ) {
s/find/replace/g;
push @updated;
}
close $fh;
open $fh, ">$file" or die "$!, for $file";
print $fh @updated;
close $fh;
}