bash - 使用 bash 命令一次下载所有 gitlab 项目
问题描述
我的 gitlab 帐户中有 200 多个项目。我想全部下载。我正在使用以下命令。
TOKEN="XXXXXXXXXX";
PREFIX="ssh_url_to_repo";
curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?per_page=100 |
grep -o "\"$PREFIX\":[^ ,]\+" |
awk -F ':' '{printf "ssh://"; for (i=2; i<NF; i++) printf $i "/"; print $NF}' |
xargs -L1 git clone
上面的命令工作正常,但它只下载 100 个项目。我尝试进行分页,但它不起作用。
TOKEN="XXXXXXXXXX";
PREFIX="ssh_url_to_repo";
curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?per_page=100&page=2 |
grep -o "\"$PREFIX\":[^ ,]\+" |
awk -F ':' '{printf "ssh://"; for (i=2; i<NF; i++) printf $i "/"; print $NF}' |
xargs -L1 git clone
- 有人可以帮我解决这个问题吗?有没有更好的办法?
- 如果你看到这个命令:
grep -o "\"$PREFIX\":[^ ,]\+" | awk -F ':' '{printf "ssh://"; for (i=2; i<NF; i++) printf $i "/"; print $NF}'
它会列出“vrath.gitlabtest.com”中的所有项目,但我可以在这里添加一些文件管理器吗?它将仅列出“vrath.gitlabtest/app1”或“vrath.gitlabtest/app2”的项目
解决方案
使用 json 感知工具解析 json:
curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?membership=true&per_page=100 |
jq -r '.[].ssh_url_to_repo' | xargs -L1 git clone
gitlab 返回的 'ssh_url_to_repo' json 字段只包含所说的内容。
请注意,我认为,如果没有membership=true
您列出 gitlab 实例上的所有存储库,而不仅仅是您所属的存储库,所以我在上面添加了它。
前段时间我写了一个脚本,从 github、gitlab 和 aur.archlinux 备份我所有的 git repos。你可以在这里查看。
推荐阅读
- json - 你如何重写结构中的类型?
- amazon-web-services - AWS Gluescript 使用 spark,胶水作业如何帮助将数据持久存储到持久存储层,如镶木地板?
- reactjs - 如何通过renderInput将状态数据传递给DesktopDatePicker?
- sql - 连接 SQL 数据库中 2 个表的多个列
- css - 根据项目内容将两列居中对齐布局转换为左对齐堆叠布局
- java - 在查询中访问用户定义的方法属性 - Esper
- python - 如何在 aiogram (Telegram API) 中执行明确的处理函数?
- c# - 使用带有泛型和 linqkit 的表达式创建 linq 查询
- time-complexity - 以下代码的最差时间复杂度是多少?
- python - 机密值不能转换为键名和值对