2017-03-10 6 views
3

リポジトリのすべてのブランチのsvn urlを取得しようとしています。私は結果を単純なbashスクリプトを使って得ました。 "xargs"を使って同じことをすることはできますか?私はxargsコマンドを把握していません。すべてのブランチのSVN URLを1行のコマンドで取得する

私はこれが唯一のsvnのlsの結果を出力し、この

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

のようなものを試してみました。

EDIT

アウトのsvnの入れLSあなただけのデNULLを読み込むためのものですxargsから-0フラグをドロップxargsの

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

@Inian編集されたorignialポスト。 – born

答えて

2

を使用している間

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

branch1 
branch2 
branch3 
branch4 

予想される出力出力を制限する、

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

は、svn ls ..からの出力はパイプライニングxargs及び受信値のプレースホルダとして機能{}に格納されている、次にsvn infoは、必要な情報を提供するために、ブランチの各々に呼び出されます。 svn lsからの出力がWord-Splittingになるのを防ぐために、二重引用符が{}であることに注意してください。 xargsmanページから引用

-0、--null

入力の項目がヌル文字ではなく、空白によって終了され、引用符やバックスラッシュ特別ではありません(すべての文字は文字通り取られます)。ファイル文字列の末尾、他の引数のように扱われる を無効にします。入力項目に空白、引用符、またはバックスラッシュが含まれる場合に便利です。 GNU find -print0オプションは、このモードに適した入力を生成します。あなたはブランチ名のそれぞれを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/{}" 

manページ参照、

実行--no-IF-空-r、

標準入力が任意のデータ有りが含まれていない場合は、コマンドを実行しないでください。通常、コマンドが入力されなくても一度実行されます。このオプションはGNU拡張です。

+0

thanx @Inian。これは、すべてのブランチチェックアウトがあり、親ディレクトリから実行している場合に機能します。 urlベースのコマンドのためにあなたのソリューションをさらに拡張する。 svn ls https://my.svn.net/svn/projectA/branches | xargs -I {} svn info https://my.svn.net/svn/projectA/branches/ "{}" – born

+0

@born:最後に私の更新を参照してください! – Inian

関連する問題