Eu não sei como fazer isso de uma só vez, mas isso pode ser feito facilmente como um pequeno script, por exemplo (levemente testado):
find -name "*.py" -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'find -name "*.py" -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'%pre%' filename; do
sed -i 's/cat/dog/g' "$filename"
echo "$filename" | grep -q "cat" \
&& mv "$filename" "${filename/cat/dog}"
done
' filename; do
sed -i 's/cat/dog/g' "$filename"
echo "$filename" | grep -q "cat" \
&& mv "$filename" "${filename/cat/dog}"
done