我在以前的博客文章:如何在命令行通过SVN命令筛选出修改过的文件并递交
思路和之前文章类似,只是这篇会对用到的命令做比较详细的分析
- 查看状态:$svn st
-
? 3600ff3d-688e-410d-9412-3af5f40e4e49.mobileprovision
- ? 568ef109-1996-48e0-b522-a9965ebdfddc.mobileprovision
- ? 618c775c-8849-45d5-9e30-96f4728059f4.mobileprovision
- ? 964b444f-86d6-4e4a-885e-e5b4f237bd20.mobileprovision
- M config.lua
- 可以看出我的当前目录有4个文件未受版本控制,1个文件被修改
- 加入grep命令
- ? 3600ff3d-688e-410d-9412-3af5f40e4e49.mobileprovision
- ? 568ef109-1996-48e0-b522-a9965ebdfddc.mobileprovision
- ? 618c775c-8849-45d5-9e30-96f4728059f4.mobileprovision
- ? 964b444f-86d6-4e4a-885e-e5b4f237bd20.mobileprovision
svn st | grep "?"解析如下:
svn st命令将输出文件的状态信息加入|的作用是将|前面命令的输出结果当做|后面grep命令的输入,grep "?"加入?的作用是将grep的输入数据赛选出未受版本控制的文件信息并输出(shell默认输出到控制台)
- 将未受控制的文件信息摘出文件名
上面的命令将输出如下结果到控制台
3600ff3d-688e-410d-9412-3af5f40e4e49.mobileprovision
568ef109-1996-48e0-b522-a9965ebdfddc.mobileprovision
618c775c-8849-45d5-9e30-96f4728059f4.mobileprovision
964b444f-86d6-4e4a-885e-e5b4f237bd20.mobileprovision
$svn st | grep "?"此命令已经详细说明,在次命令后面加入| cut命令是将grep "?"命令的输出作为cut命令的输入,cut命令的参数 -c 9-是截取输出的信息中每行中的从第9列开始到行尾的数据,这样输出的信息不包含? 和空格相关的数据了。
- 将$svn st | grep "?" | cut -c 9-的输出结果重定向到一个临时文件
>的作用是将>左边命令的输出定向到>右边的文件中(不在控制台上输出),这样del.txt就保存了所有需要删除的文件名信息
- 最后通过svn delete命令将del.txt中列出的文件删除
$svn delete --force --targets del.txt
大工告成,收工!