在 GitHub 上,curl 本身不能直接下载文件夹,不过可以通过一些变通的方法来实现近似的功能,以下为你详细介绍:

利用 GitHub API 下载压缩包

GitHub 提供了 API 允许你以压缩包形式下载仓库,你可以借助 curl 结合用户名和个人访问令牌(自 2021 年 8 月 13 日起,GitHub 不再接受账户密码用于 HTTPS 认证,需用个人访问令牌替代)来下载仓库,之后再解压获取文件夹。

操作步骤
  1. 生成个人访问令牌:登录 GitHub 账户,在设置里生成具有 repo 权限的个人访问令牌。
  2. 使用 curl 下载压缩包

bash

curl -u username:personal_access_token -L -o repo.zip https://github.com/username/repository/archive/refs/heads/main.zip

  • -u:指定用户名和个人访问令牌。
  • -L:若服务器返回重定向,会自动跟随重定向。
  • -o:指定下载的压缩包在本地保存的文件名。
  • https://github.com/username/repository/archive/refs/heads/main.zip:此为仓库的主分支(main)的压缩包下载链接,你可按需替换分支名。

  1. 解压压缩包

bash

unzip repo.zip
示例

假设用户名是 john_doe,个人访问令牌是 abcdef123456,要下载 https://github.com/john_doe/myrepo 仓库:

bash

curl -u john_doe:abcdef123456 -L -o myrepo.zip https://github.com/john_doe/myrepo/archive/refs/heads/main.zip
unzip myrepo.zip

只下载指定文件夹

要是你只想下载仓库中的某个特定文件夹,可以借助第三方工具 git-archive-all 结合 curl 来实现。

操作步骤
  1. 安装 git-archive-all:可从其 GitHub 仓库 下载脚本并赋予执行权限。
  2. 创建临时仓库并下载指定文件夹

bash

# 创建临时目录
mkdir temp_repo
cd temp_repo

# 克隆仓库(浅克隆以减少下载量)
git clone --depth=1 https://github.com/username/repository.git .

# 使用 git-archive-all 打包指定文件夹
/path/to/git-archive-all --prefix=folder_name/ -t zip -o folder.zip folder_name

# 下载打包好的文件夹
curl -u username:personal_access_token -L -o local_folder.zip https://raw.githubusercontent.com/username/repository/main/folder.zip

# 解压文件夹
unzip local_folder.zip

# 清理临时目录
cd ..
rm -rf temp_repo

  • /path/to/git-archive-all:需替换为 git-archive-all 脚本的实际路径。
  • folder_name:要下载的文件夹名称。

注意事项

  • 妥善保管个人访问令牌,防止泄露。
  • 若使用的是 GitHub Enterprise,需把 https://github.com 替换为你的 GitHub Enterprise 实例的对应 URL。

更多推荐