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

时间:2009-08-20 18:53:49

标签: svn repository

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

现在他们都被标记为“!”在 svn status 中,我想删除它们而无需手动输入 svn remove blahblah

有快速的方法吗?

1 个答案:

答案 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而言。想想看,它可能只是用引号包装它......