目标

目标

目标

将存储库克隆到名为.owner.login(Github REST API 中的参数)的子目录中,其中包含jqgit clonexargs


前言

我在某处获取了一段代码,允许我使用 、 和 克隆jq存储git clonexargs。但是,我无法对其进行设置,以便它为每个存储库创建一个新的父目录。 (我是一个 Windows 用户,但对于我想要实现的目标,除了这个 bash 脚本之外,我无法查询任何其他解决方案。我不知道 GNU 命令如何交互在一起,这是我能放在一起的最多的知识)

原始代码

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

它以 2 条不同的行而不是一行返回.html_url, 。.full_name

我认为这是问题所在,但后来我尝试xargs单独运行:

https://github.com/repoauthor/reponame |\
xargs -l git clone

它只是让我进入 git 帮助文件。

太长了;博士

我需要将生成的字符串集成jqxargs.但是,jq将重要的字符串生成为两个不同的行,这可能是导致错误的原因,但我不知道如何解决它。

答案1

由于您没有向我们提供特定的 Github 用户来重现您的特定问题,因此我已经使用我自己认识的其他 Github 帐户进行了测试。

您的尝试有两个主要问题。

  1. xargs理想情况下应该引用所阅读的各个论点。
  2. xargs需要git clone使用两个单独的参数进行调用:存储库 URL 和要将其克隆到的目标目录。

您可以像这样整理参数的引用:

curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh'

这将从对请求的响应中提取所需信息curl到一个数组中,然后使用@sh运算符将​​每个这样的数组输出为一行 shell 引用的单词。

严格来说,我们也可以使用.[] | .html_url, .full_name | @shas表达式来获取带有单 shell 引用字符串的行流,这与我们使用它的方式jq无关。xargs

给定这个单词流,我们然后调用git clonevia xargs

xargs -n 2 git clone

-n 2方法xargs将一次使用其输入流中的两个参数来调用该实用程序。

把它放在一起:

curl -s "https://api.github.com/users/$UserName/repos?per_page=1000" |
jq -r '.[] | [ .html_url, .full_name ] | @sh' |
xargs -n 2 git clone

相关内容