长话短说,出现了一个错误,现在我需要从我的存储库中删除数十个文件夹中至少有一百个文件。
现在他们都被标记为“!”在 svn status 中,我想删除它们而无需手动输入 svn remove blahblah 。
有快速的方法吗?
答案 0 :(得分:5)
使用一些shell-scripting-foo非常容易。
svn status | grep "^\!" | awk '{print $2}' | xargs svn del
根据要求,这是一个细分:
svn status
的输出通过管道传输到grep
grep
管道以!
开头的每一行(正则表达式中的^
表示行的开头,并且'\'是必要的,以逃避{{的特殊含义1}})!
然后从awk
获取第二个“参数”(可以这么说......这是文件的路径)并仅将其传递给... grep
这只是一个用于从标准输入构建执行shell命令的实用程序,它生成并运行命令xargs
您还可以使用此行中的变体来使用svn del your/file/here
执行各种方便的操作,例如以递归方式将文件添加到repo中:
svn
另外,我记得,并且想指出如果你的路径或文件名中有空格,这将不起作用。我总是忘记这一点,因为我永远不会这样做。如果路径/文件名中有空格,请在第一个示例中使用以下变体:
svn status | grep "^\?" | awk '{print $2}' | xargs svn add
(这可能是一种更优雅的方式,所以请随意加入)。在这一个中,第一个svn status | grep "^\!" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn del
获取第一个空格字符,以及跟随它的任何(如果有的话)空格,并删除它们(基本上是修剪)。然后对sed
的第二次调用用sed
替换任何剩余的空格,这是一个转义空间,就shell而言。想想看,它可能只是用引号包装它......