如果匹配关键字,则recursion地更改文件的名称和文件内的内容

我可以使用sed来recursion​​地查找和replace一堆文件中的string。 像这样:

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

然而,有没有办法在文件和实际文件名中searchstring?

如果在文件名中find该string,则用新stringreplace文件名中的string。

如果实际文件中的string,则用新stringreplacestring。

当然,要recursionsearch。

有任何想法吗?

我不知道如何一次完成这个任务,但是它可以很容易地作为一个小脚本完成,例如(轻度testing):

 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