详解mac下命令行实现svn批量添加和删除

需求

mac下的svn客户端不是收费的就是不好用的,要不就是收费还不好用的(Versions啊,Conerstone啊,还有个什么忘记了,总之都会出现这样那样的问题,就没有一个能想window下的TortoiseSVN,那么简单稳定)。。。

使用了一段时间的命令行,感觉体验很好,作为coder几乎可以不用鼠标,一直敲键盘的感觉还是不错的。当然有几种情况还是很痛苦的————其中一种:当你需要使用svn大量添加和删除文件的时候。

调研

搜索之下,方法还是真有:

1
2
svn status|grep ! |awk '{print $2}'|xargs svn del       # 批量删除文件 
svn status|grep ? |awk '{print $2}'|xargs svn add # 批量添加文件

说明

上述命令可以拆解为一下几个命令的组合

  • UNIX/linux shell 管道操作符 '|': A|B意为“执行A,A的输出作为B的输入,然后执行B”
  • svn del/add target :添加删除 某个文件或文件夹。
  • svn status : 列出svn当前目录的变化。
  • grep: 用于查找文件里符合条件的字符串,可以理解为一种字符串过滤器
  • awk {print $2}:awk一种文本处理工具
  • xargs cmd:给某个cmd传参数

下面是上面一些工具的详细说明

awk命令

AWK 程序是由一系列模式–动作对组成的,写做

1
pattern { action }

这里不做详细说明,因为上面给出了链接。这里解释一下awk {print $2}的应用,这条命令的语义是:将输入的每行的第二组内容打印输出。结合svn status|grep ! |awk '{print $2}'使用,就是取出svn status信息中文件丢失的那一部分文件的路径名列表。

xargs命令

xargs 是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题

grep

grep 是一个最初用于Unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。