将整个工作区中的每个产品名称实例更改为新的实例

时间:2014-05-01 16:32:21

标签: python shell svn

最近的产品品牌重塑促使我将工作区中旧产品名称的每个实例更改为新产品名称。这不仅涉及更改每种文件类型的源代码,还涉及文件和目录名称。

此外,源代码由SVN控制。因此,我不想要改变.svn目录中的任何内容。这增加了一个有趣的警告...

以下脚本基本上就是我使用的" oldname"是旧产品名称和" newname"是新的。我在更改文件和目录名时遇到问题。我确定它与在文件系统上动态重命名这些路径有关。另外,我还没想出如何跳过.svn目录。我想知道是否有更聪明的方法可以使用Python?

(如果产品名称再次更改,我希望这是一个脚本)

#!/bin/sh

exts=('*.m', '*.java');

# change text
for ext in "${exts[@]}"
do
    find . -name $ext -type f -exec sed -i 's/oldname/newname/' {} \;
    find . -name $ext -type f -exec sed -i 's/OldName/NewName/' {} \;
    find . -name $ext -type f -exec sed -i 's/OLDNAME/NEWNAME/' {} \;
done

# change file names
find . -name "*oldname*" -type f -exec rename oldname newname {} \;
find . -name "*OldName*" -type f -exec rename OldName NewName {} \;
find . -name "*OLDNAME*" -type f -exec rename OLDNAME NEWNAME {} \;

# change directory names
find . -name "*oldname*" -type d -exec rename oldname newname {} \;
find . -name "*OldName*" -type d -exec rename OldName NewName {} \;
find . -name "*OLDNAME*" -type d -exec rename OLDNAME NEWNAME {} \;

1 个答案:

答案 0 :(得分:0)

  1. 从效果POV find ... -exec 糟糕的想法(tm)find ... -print0 | xargs -0好多了
  2. 版本化对象的操作系统类型重命名再次为错误想法(tm):您将获得损坏的历史记录,必须调用svn mv
  3. 忽略.svn文件夹查找(不是文件夹S - 你使用新的SVN客户端,不是吗?)是find -not -iwholename '*.svn' -name ...
  4. 使用ack
  5. 更容易