布莱恩F爱
向一位来自Portlandyobet英雄联盟的谷歌开发专家学习Angular、Web技术和Node.js。
广告 ·ultimatecourses.com
用终极课程学习Angular的正确方法”></a>
          </div>
          <article class=

在多个SVN存储库中查找并替换

一个bash shell脚本,用于在多个svn存储库中的所有文件中查找和替换。

下面是我想要脚本做的:

  • 提示用户要查找的值
  • 提示用户输入要替换“find”值的值
  • 提示用户输入SVN提交消息
  • 对于每个存储库,在我的机器上签出并更新一个工作副本,然后执行查找和替换,最后将更改提交到SVN服务器

预排

我需要做的第一件事是定义一些常量变量来保存一些值,比如根SVN的URL,帕特h存储工作副本,以及的名字所有的存储库。

#定义常量BASE_URL=“http://svn.example.com/”=”布赖恩/用户/ /回购/”存储库=(“访问”“可访问性”“Adobe”“Ajax”“阿帕奇”“CSS”)

接下来要做的是提示用户输入必要的值。然后我就逃离了找到取代任何特殊正则表达式字符的值。

#提示用户查找值- p“你想要取代什么价值?”找到find_regex=$ (回声${找到}|sed的 !\([]\*\.\$\/&[]\)!\ \\ 1g !”)#提示用户输入替换值- p“你想用什么价值来取代它?”取代replace_regex=$ (回声${}替换|sed的 !\([]\*\.\$\/&[]\)!\ \\ 1g !”)#提示用户输入提交消息- p“为所有更新输入提交消息:”commit_message

现在是时候对每个存储库进行循环了。执行svn签出和更新非常容易,但是查找和替换就有点棘手了。

循环遍历每个存储库${存储库(@]}为每个迭代设置变量url=$ {BASE_URL}${我}/干”路径=$ {ROOT}${我}#做检验回声“结账:$ {url}svn checkout$ {url}$ {path}一定要找到并替换回声“替换${找到}“与”${}替换’”greplr - exclude-dir=. svn”- e${找到}$ {path}|xargssed-我''- e“s /$ {find_regex}/$ {replace_regex}/ g”#做承诺回声“提交”svn commit - m$ {commit_message}$ {path}完成

完整的脚本

# ! / bin / bash#定义常量BASE_URL=“http://svn.example.com/”=”布赖恩/用户/ /回购/”存储库=(“访问”“可访问性”“Adobe”“Ajax”“阿帕奇”“CSS”)#提示用户查找值- p“你想要取代什么价值?”找到find_regex=$ (回声${找到}|sed的 !\([]\*\.\$\/&[]\)!\ \\ 1g !”)#提示用户输入替换值- p“你想用什么价值来取代它?”取代replace_regex=$ (回声${}替换|sed的 !\([]\*\.\$\/&[]\)!\ \\ 1g !”)#提示用户输入提交消息- p“为所有更新输入提交消息:”commit_message#让用户知道我们开始了回声“谢谢。我们将替换'的所有实例${找到}“与”取代美元’。”回声好了,让我们看看所有的SVN存储库。请耐心等待……”循环遍历每个存储库${存储库(@]}为每个迭代设置变量url=$ {BASE_URL}${我}/干”路径=$ {ROOT}${我}#做检验回声“结账:$ {url}svn checkout$ {url}$ {path}一定要找到并替换回声“替换${找到}“与”${}替换’”greplr - exclude-dir=. svn”- e${找到}$ {path}|xargssed-我''- e“s /$ {find_regex}/$ {replace_regex}/ g”#做承诺回声“提交”svn commit - m$ {commit_message}$ {path}完成

下载

如果你想下载完整的脚本,这里你去:

下载

只是解压缩,并设置它为可执行:

美元修改文件权限+ x find-and-replace.sh

布莱恩F爱

嗨,我是布莱恩。我对TypeScript, Angular和Node.js感兴趣。我和我最好的朋友邦妮结婚了,我住在波特兰,我经常滑雪。