ユーザーのGitHubアカウントにあるすべてのパブリックリポジトリをインポートする必要があります。そのためにAPI出力を取得しました。https://api.github.com/users/SOMEUSER/repos
これが私が思いついたものです。ファイルからssh_url行を抽出するには、次のようにします。
sed -n '/ssh_url/p' SOMEFILE
これでリポジトリのSSH URLだけが残り、その周囲には引用符があります。今私はそれを見つけました:
awk -F\" '{print $(NF-1)}'
それからそれらを一つにまとめました。
curl https://api.github.com/users/SOMEUSER/repos | sed -n '/ssh_url/p' | awk -F\" '{print $(NF-1)}' | xargs -n1 git clone
今仕事をしているのでいいですね。なぜ動作しますか?
答え1
sed -n '/ssh_url/p'
文字列を含むすべての行を印刷しますssh_url
。これはsed
一般的な用途ではありません。これは次の方法で行うことができますgrep
(awk
直接awk
使用することもできます)。
grep ssh_url
awk -F\" '/ssh_url/ {print $(NF-1)}'
-F\"
awk
文字で区切られた行の内容を示します"
。NF
フィールド数。つまり、NF-1
"
行に文字があります。print $(NF-1)
最後のフィールドを印刷します。行がある場合は印刷foo"bar"baz
してくださいbar
。
答え2
このコマンドはJSON文字列を返すので、JSONパーサーを使用します。jq
url="https://api.github.com/users/USER/repos"
curl -s "$url" | jq '.[]|.ssh_url' | tr -d '"'
jqスクリプトは、配列の各要素に "ssh_url"メンバーの値を提供することを意味します。二重引用符を削除するには、trを使用してください。