我想检查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
目录似乎没有反斜杠。有没有解决的办法?
答案 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)
我根据建议的解决方案对问题进行了解决:
svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g" >>file.txt
for /F "usebackq tokens=*" %%A in (file.txt) do (svn remove "%%A")