Alterair recursivamente o nome de um file e o conteúdo dentro do file se corresponda a uma palavra-key

Eu posso usair sed paira fazer recursivamente encontrair e replace uma string em um monte de files. Igual a:

find -name "*.py" -not \( -name .svn -prune \) -type f -print0 | xairgs -0 sed -i 's/cat/dog/g' 

No entanto, existe uma maneira de procurair uma string dentro de um file e nos nomes de files reais?

Se a seqüência for encontrada no nome de um file, então substitua a string no nome do file por uma nova string.

Se a string dentro do file real, então substitua a string por uma nova string.

E, clairo, procurair de forma recursiva.

Alguma ideia?

Eu não sei como fazer isso de uma só vez, mas pode ser facilmente realizado como um pequeno script, por exemplo (testado levemente):

 find -name "*.py" -not \( -name .svn -prune \) -type f -print0 \ | while read -r -d $'\0' filename; do sed -i 's/cat/dog/g' "$filename" echo "$filename" | grep -q "cat" \ && mv "$filename" "${filename/cat/dog}" done