【问题标题】:Using sed in svn command ignores directory backslashes在 svn 命令中使用 sed 会忽略目录反斜杠
【发布时间】:2019-10-04 20:36:58
【问题描述】:

我想检查我的 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

该目录似乎缺少反斜杠。有办法解决吗?

【问题讨论】:

    标签: svn sed grep xargs


    【解决方案1】:

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

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

    【讨论】:

    • 当我执行命令时,我得到 awk: sub(/^! */, ") awk: ^ unterminated string(指向表达式中的 "
    • 在子表达式中要具体
    【解决方案2】:

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

    >>> echo '!C  C:\\Tools\\Jenkins\\' | sed -nr 's/!C *//gp'
    
    C:\\Tools\\Jenkins\\
    

    我意识到问题出在命令的xargs 部分。您需要使用-0 选项:

    >>> echo '!C  C:\\Tools\\Jenkins\\' | sed -nr 's/!C *//gp' | xargs -0 echo
    
    C:\\Tools\\Jenkins\\
    

    这在Escaping backslash in windows paths passed to unix programs中讨论过

    【讨论】:

    • 我收到错误“C:\Program Files (x86)\GnuWin32\bin\xargs.exe: echo: No such file or directory”
    • 我尝试通过键入“svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed.exe "s/^\! *//g" | xargs -0 svn --force rm " 我得到 "svn: E020024: Error resolve case of 'C:\Tools\Jenkins\jobs\run_tests_on_master" :(
    • @Biba 我无法访问 Windows 机器,但仍然尝试使用单引号 ' 而不是双引号 "
    【解决方案3】:

    我根据建议的解决方案解决了这个问题:

    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")
    

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 2021-02-18
      相关资源
      最近更新 更多