使用单行命令获取所有分支的SVN URL

时间:2017-03-10 06:38:42

标签: bash svn xargs

我正在尝试检索存储库中所有分支的svn url。我使用简单的bash脚本得到了结果。 我可以使用" xargs" 。我没有抓住xargs命令。

我试过这样的事情

svn ls https://my.svn.net/svn/projectA/branches | xargs -0 -I {} svn info {}\ ; 

仅打印svn ls的结果。

任何想法?

修改

输出svn ls

svn ls https://my.svn.net/svn/projectA/branches

branch1
branch2
branch3
branch4

使用xargs时的预期输出

https://my.svn.net/svn/projectA/branches/branch1
https://my.svn.net/svn/projectA/branches/branch2
...
...

1 个答案:

答案 0 :(得分:2)

您只需从-0中删除xargs标记,该标记用于读取NULL非限制输出,只需执行

svn ls https://my.svn.net/svn/projectA/branches | xargs -I {} svn info "{}" 

此处,svn ls ..的输出管道为xargs,并存储在{}中,作为收到值的占位符,然后svn info为要求每个分支机构提供您想要的信息。请注意{}周围的双引号,以防止svn ls的输出由shell完成Word-Splitting

man的{​​{1}}页面引用,

  

-0, - null

     

输入项由 null字符而不是空格 终止,引号和反斜杠不是特殊的(每个字符都是字面意思)。禁用文件字符串的结尾,                 这与任何其他论点一样对待。输入项可能包含空格,引号或反斜杠时很有用。 GNU find -print0 选项产生适合此模式的输入。

从评论中看起来好像你想要追加xargs每个分支名称,你可以这样做

URL

与当前答案无关。此外,如果您使用svn ls https://my.svn.net/svn/projectA/branches | \ xargs -I {} svn info "https://my.svn.net/svn/projectA/{}" ,则可以使用其GNU xargs标志来确保命令未在管道的空输入上运行。

-r

xargs -r -I {} svn info "https://my.svn.net/svn/projectA/{}" 页面参考,

  

-r, - no-run-if-empty

     

如果标准输入不包含任何非空白,请不要运行该命令。通常,即使没有输入,命令也会运行一次。此选项是 GNU扩展