在svn命令中使用sed会忽略目录反斜杠

时间:2019-05-17 13:40:32

标签: svn sed grep xargs

我想检查SVN工作副本中文件的状态,然后通过svn将其删除(如果已将其手动删除(以便可以提交))。 我发现

svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g"

正确找到我手动删除的文件,我的情况是Jobs \ run_tests_on_master。但是当我尝试使用以下方式删除目录时:

svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g" | xargs svn rm

我收到错误消息:

svn: E155007: 'C:\ToolsJenkinsjobsrun_tests_on_master' is not a working copy

目录似乎没有反斜杠。有没有解决的办法?

3 个答案:

答案 0 :(得分:0)

以下awk将测试svn输出的每一行,以查看它是否可以删除感叹号,并在该行的开头删除空格。如果这样做,它将对结果字符串执行svn rm

svn status 'C:\Tools\Jenkins' |awk 'sub(/^! */, ""){system("svn rm " $0)}'

答案 1 :(得分:0)

您可以做两件事来改进您的命令:用一次对grep的调用替换sed + sed的组合(感谢-n和{{1} }标志),并在p中使用单引号。使用sed代替echo,将是这样的:

svn

我意识到问题出在命令的>>> echo '!C C:\\Tools\\Jenkins\\' | sed -nr 's/!C *//gp' C:\\Tools\\Jenkins\\ 部分。您需要使用xargs选项:

-0

Escaping backslash in windows paths passed to unix programs

中对此进行了讨论

答案 2 :(得分:0)

我根据建议的解决方案对问题进行了解决:

  1. 将已删除的文件存储在txt文件中
svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g" >>file.txt
  1. 使用svn remove命令删除file.txt中指示的文件
for /F "usebackq tokens=*" %%A in (file.txt) do (svn remove "%%A")