对匹配特定模式的文件夹中的许多文件运行svn重命名

时间:2013-03-13 14:29:54

标签: svn

如果文件夹中包含使用设计名称作为文件一部分的文件,我希望在匹配设计名称时运行svn rename。显示文件的目录列表(此处显示的内容以上)具有以下格式:

    reg_ptst_lib_ptst_rtl_12.ngc
    reg_ptst_lib_ptst_rtl_13.ngc
    reg_ptst_lib_ptst_rtl_14.ngc
    reg_ptst_lib_ptst_rtl_15.ngc

设计名称字符串是ptst。 我想让脚本迭代每个文件,执行类似这样的命令:

$svn rename reg_ptst_lib_ptst_rtl_12.ngc reg_scst3_lib_scst3_rtl_12.ngc  

在subversion中将设计名称从ptst更改为scst3

3 个答案:

答案 0 :(得分:8)

不需要使用ruby或perl,这是findawkbash的示例。在包含您的文件的目录中:

find *.ngc | awk '{ str=$0; gsub(/ptst/,"scst3",str); print "svn rename " $0 " " str }' | bash

您可以先删除最后的| bash来测试它,然后将svn rename命令输出到终端。

答案 1 :(得分:0)

与Jon相同的方法,只是在文件名周围添加引号,以防其他人(比如我)想要在文件名包含空格时执行类似的操作。

find *.ngc | awk '{ str=$0; gsub(/ptst/,"scst3",str); print "svn rename \"" $0 "\" \"" str "\""}' | bash

答案 2 :(得分:0)

我已经完成了该任务的总指挥官+ Windows批处理文件。只要可以通过键盘快捷键或工具栏按钮调用带有所选文件参数的脚本,您就可以使用其他任何命令程序,例如Far。

这个想法是在Commander应用程序中选择要重命名的文件/目录(无论是否受版本控制都无关紧要),然后将它们放入临时创建的文本文件中(Total Commander会通过%L变量),然后调用脚本以重命名该列表文件选择的路径。

该脚本仅将列表文件复制到2个临时列表文件中,然后打开,例如,使用Notepad ++编辑第二个列表文件。在Notepad ++中完成文件的重命名后,请关闭编辑器并保存更改,然后脚本将比较两个列表并进行重命名。

您可以从此处下载脚本:https://svn.code.sf.net/p/contools/contools/trunk/Scripts/Tools/ToolAdaptors/totalcmd

搜索svn_rename_by_list.batgit_rename_by_list.bat。阅读README_EN.txt了解详情。

重要:由于一个脚本可以将另一个脚本用作依赖项,因此您必须自己查找所有依赖项并下载。