如何通过GH CLI筛选并克隆指定规则的GitHub仓库?
解决方案:筛选并克隆指定规则的GitHub仓库
方法一:使用gh repo list直接筛选并克隆
这是最简洁的实现方式,结合grep做正则筛选后循环克隆:
gh repo list open-itg --limit 500 --json name --jq '.[].name' | grep -E 'terraform-datadog-.+-oac' | while read -r repo_name; do gh repo clone "open-itg/$repo_name" done
--json name --jq '.[].name':仅提取仓库名称,过滤掉多余输出内容grep -E 'terraform-datadog-.+-oac':用扩展正则精准匹配terraform-datadog-<服务名>-oac格式的仓库- 循环读取筛选后的仓库名,调用
gh repo clone完成批量克隆
方法二:使用gh api结合jq筛选
如果需要更灵活的API参数控制,可通过GitHub API配合jq的内置筛选能力实现:
gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /orgs/open-itg/repos --paginate --jq '.[] | select(.name | test("terraform-datadog-.+-oac")) | .name' | while read -r repo_name; do gh repo clone "open-itg/$repo_name" done
--paginate:自动处理分页请求,确保获取组织内所有仓库jq '.[] | select(.name | test("正则")) | .name':直接在jq环节完成仓库名的规则筛选
你之前命令的问题说明
- 第一段命令仅列出所有仓库名称,未添加筛选逻辑,无法定位目标仓库。
- 第二段命令存在多处错误:
- Bash的正则匹配
=~后不需要加引号,加引号会将正则转为普通字符串匹配,失去规则作用。 - 正则表达式写得不准确,正确规则应为
terraform-datadog-.+-oac,而非^(open-itg/terraform-datadog*)。 - 循环结构不完整,缺少
then和fi语句,也没有添加克隆仓库的执行逻辑。
- Bash的正则匹配
内容的提问来源于stack exchange,提问作者Devon
相关产品推荐
相关产品推荐

