ターゲット
とを含む.owner.login
(Github REST APIのパラメータ)という名前のサブディレクトリにリポジトリを複製しますjq
。git clone
xargs
ヘッダー
、jq
およびを使用してリポジトリを複製できるコードがどこかにあります。ただし、各リポジトリに対して新しい親ディレクトリを作成するように設定することはできません。 (私はWindowsユーザーですが、このbashスクリプトに加えて達成しようとしている他の解決策についてクエリすることはできません。GNUコマンドがどのようにやり取りするのかわかりません。git clone
xargs
オリジナルコード
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[].html_url' |\
xargs -l git clone
私の修正は次のとおりです。
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[] | .html_url, .full_name' |\
xargs -l git clone
元のコードと同じ結果を得ます。次のエラーログもあります。
fatal: repository 'repoauthor/reponame?' does not exist
私はそれがどこから来たのかわかりません\?
。
だからデバッグをしようとしています。
コードを分けて
UserName=CHANGEME; \
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |\
jq -r '.[] | .html_url, .full_name'
次を返します。
https://github.com/repo1name/repo1author
repo1name/repo1author
https://github.com/repo2name/repo2author
repo2name/repo2author
... etc
1つではなく2つの異なる行に返されます.html_url
。.full_name
xargs
これが問題だと思いましたが、一人で走ってみました。
https://github.com/repoauthor/reponame |\
xargs -l git clone
ちょうどgitのヘルプファイルに移動します。
長すぎます。
生成された文字列をjq
。xargs
jq
ベストアンサー1
特定の問題を再現するために特定のGithubユーザーを提供していないため、個人的に知っている他のGithubアカウントを使用してテストしました。
あなたの試みには2つの主な問題があります。
xargs
理想的には、読んだ各主張を引用する必要があります。xargs
これはgit clone
、ストレージURLとそれを複製するターゲットディレクトリという2つの個別のパラメータを使用して呼び出す必要があります。
次のようにパラメータへの参照を整理できます。
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh'
これは、要求に対する応答から必要な情報を配列にcurl
抽出し、@sh
演算子を使用して各配列をシェル引用語行に出力します。
厳密に言えば、.[] | .html_url, .full_name | @sh
as式を使用して単一のシェル引用符付き文字列を含む行ストリームを取得することもできます。どのように使用するかは重要ではありませんjq
。xargs
この単語ストリームが与えられたら、git clone
viaを呼び出しますxargs
。
xargs -n 2 git clone
この-n 2
メソッドは、xargs
入力ストリームで一度に2つの引数を使用してユーティリティを呼び出します。
総合してみると:
curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh' |
xargs -n 2 git clone