通过“svn st | grep ?”命令可以得到需要添加的文件列表,但每行都以‘?’开头所以无法直接通过xargs传给svn add。 那么问题转换为如何才能把那些?过滤掉呢?
例:
得到的文件列表:
d:\PROJET\repo\trunk>svn st | grep ?
? main.xml
? logo.png
? bin
? gen
? add.png
希望最终执行的命令:svn add main.xml logo.png bin gen add.png
例:
得到的文件列表:
d:\PROJET\repo\trunk>svn st | grep ?
? main.xml
? logo.png
? bin
? gen
? add.png
希望最终执行的命令:svn add main.xml logo.png bin gen add.png
要注意使用svn add -A 并不是一个好方法;对于我这个新手来讲解决方案不是太明显,但是经过研究和发帖求助还是找到了答案;
svn st | grep ? | sed "s/?//" |xargs svn add
svn st | awk '{if($1 == "?"){print $2}}'|xargs svn add
第一种方案使用sed 把?替换为空然后传过去就好了,第二种使用了awk命令;这两个命令在进行字符串的替换等处理时是非常常用的,有了他们思路就比较完整了;建议和我一样的新手们好好研究一下sed以及正则表达式,很组合成很强大的脚本哦;)