SVN:设置标有"!"的所有文件 到"D"?

2 svn repository

长话短说,出现了一个错误,现在我需要从我的存储库中删除几十个文件夹中的至少一百个文件.

现在他们都被标记为"!" 在svn状态,我想删除它们而无需手动输入svn remove blahblah.

有快速的方法吗?

jas*_*son 5

使用一些shell-scripting-foo很容易做到这一点.

svn status | grep "^\!" | awk '{print $2}' | xargs svn del
Run Code Online (Sandbox Code Playgroud)

根据要求,这是一个细分:

  • 输出通过svn status管道输送到grep
  • grep管道以a开头的每一行!(^在正则表达式中表示行的开头,并且'\'是必要的,以逃避特殊含义!)
  • awk然后采取第二个"参数"(可以这么说......这是文件的路径),grep并将其仅管道到......
  • xargs 这只是一个用于从标准输入构建执行shell命令的实用程序,它生成并运行命令 svn del your/file/here

您还可以使用此行中的变体来执行各种方便的操作svn,例如递归地向repo添加文件:

svn status | grep "^\?" | awk '{print $2}' | xargs svn add
Run Code Online (Sandbox Code Playgroud)

另外,我记得,并且想指出如果你的路径或文件名中有空格,这将不起作用.我总是忘记这一点,因为我永远不会这样做.如果路径/文件名中有空格,请在第一个示例中使用以下变体:

svn status | grep "^\!" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn del
Run Code Online (Sandbox Code Playgroud)

(这可能是一种更优雅的方式,所以请随意加入).在这一个中,第一个sed采用第一个空白字符,以及跟随它的任何(如果有的话)空格,并删除它们(基本上是修剪).然后第二次调用sed替换任何剩余的空间\,这是一个转义空间,就shell而言.想想看,它可能只是用引号包装它......