You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用curl或wget从Backblaze B2下载需登录的快照至远程服务器

从Backblaze B2下载需登录态的快照小文件(curl/wget实现)

方法一:通过B2 API生成可直接下载的签名URL(推荐,稳定无会话依赖)

这种方法利用Backblaze官方API生成带签名的临时下载链接,无需依赖web登录会话,适合批量处理大量小文件。

1. 获取认证凭证

在Backblaze控制台生成Application Key(优先使用受限密钥,避免主密钥泄露),记录你的ACCOUNT_ID和APPLICATION_KEY。

执行curl获取授权令牌和API端点:

curl -u "ACCOUNT_ID:APPLICATION_KEY" https://api.backblazeb2.com/b2api/v2/b2_authorize_account

从返回结果中提取authorizationToken和apiUrl两个值,后续步骤会用到。

2. 定位目标Bucket ID

如果已知Bucket名称,用API查询Bucket详情获取bucketId:

curl -H "Authorization: AUTHORIZATION_TOKEN" "${API_URL}/b2api/v2/b2_list_buckets"

在返回的JSON数据中找到目标Bucket对应的bucketId。

3. 列出快照中的所有小文件

如果快照文件有统一前缀(比如snapshot_2024/),用API批量拉取文件列表:

curl -H "Authorization: AUTHORIZATION_TOKEN" "${API_URL}/b2api/v2/b2_list_file_names" \
  -d '{"bucketId": "BUCKET_ID", "prefix": "SNAPSHOT_FILE_PREFIX"}'

将SNAPSHOT_FILE_PREFIX替换为你的快照文件前缀,返回的files数组包含每个文件的fileId和fileName。

4. 批量下载脚本

将以下脚本保存为b2_download.sh,替换占位符后执行,自动批量下载所有文件:

#!/bin/bash
# 配置参数
ACCOUNT_ID="你的账号ID"
APPLICATION_KEY="你的应用密钥"
BUCKET_ID="目标Bucket ID"
PREFIX="快照文件前缀"
DOWNLOAD_DIR="/path/to/your/download/folder"

# 创建下载目录
mkdir -p "$DOWNLOAD_DIR"

# 获取认证信息
AUTH_RESPONSE=$(curl -s -u "$ACCOUNT_ID:$APPLICATION_KEY" https://api.backblazeb2.com/b2api/v2/b2_authorize_account)
AUTH_TOKEN=$(echo "$AUTH_RESPONSE" | grep -o '"authorizationToken":"[^"]*"' | cut -d'"' -f4)
API_URL=$(echo "$AUTH_RESPONSE" | grep -o '"apiUrl":"[^"]*"' | cut -d'"' -f4)

# 获取文件列表
FILES_RESPONSE=$(curl -s -H "Authorization: $AUTH_TOKEN" "$API_URL/b2api/v2/b2_list_file_names" -d '{"bucketId": "'"$BUCKET_ID"'", "prefix": "'"$PREFIX"'"}')
FILE_IDS=$(echo "$FILES_RESPONSE" | grep -o '"fileId":"[^"]*"' | cut -d'"' -f4)
FILE_NAMES=$(echo "$FILES_RESPONSE" | grep -o '"fileName":"[^"]*"' | cut -d'"' -f4)

# 循环下载每个文件
paste <(echo "$FILE_IDS") <(echo "$FILE_NAMES") | while read -r FILE_ID FILE_NAME; do
  # 生成临时下载URL(有效期默认24小时)
  DOWNLOAD_URL=$(curl -s -H "Authorization: $AUTH_TOKEN" "$API_URL/b2api/v2/b2_get_download_url_by_file_id" -d '{"fileId": "'"$FILE_ID"'"}' | grep -o '"downloadUrl":"[^"]*"' | cut -d'"' -f4)
  echo "正在下载: $FILE_NAME"
  # 用wget下载,如需curl替换为:curl -o "$DOWNLOAD_DIR/$FILE_NAME" "$DOWNLOAD_URL"
  wget -q -P "$DOWNLOAD_DIR" "$DOWNLOAD_URL"
done

执行前赋予脚本权限:chmod +x b2_download.sh,然后运行./b2_download.sh。

方法二:利用web会话Cookie下载(适合已有web端下载链接的场景)

如果已经通过Backblaze web界面获取了文件的下载链接,但需要登录态才能访问,可以通过cookie维持会话批量下载。

1. 获取登录Cookie

用curl模拟登录Backblaze,生成会话cookie文件:

curl -c b2_cookies.txt -d "email=你的登录邮箱&password=你的登录密码" https://secure.backblaze.com/user_signin.htm

注意:该方法可能因Backblaze的验证码机制、登录策略变化失效,仅作备选。

2. 批量下载

将所有待下载URL存入download_urls.txt(每行一个URL),用wget批量下载:

wget --load-cookies b2_cookies.txt -i download_urls.txt -P /path/to/save/files

或用curl循环下载:

while read -r URL; do
  curl -b b2_cookies.txt -o "/path/to/save/files/$(basename "$URL")" "$URL"
done < download_urls.txt

注意事项

  • API生成的下载URL有效期最长为86400秒(24小时),过期需重新生成。
  • 批量下载时建议加入重试机制(比如wget的--tries=3),应对网络波动。
  • 优先使用API方法,稳定性和安全性远高于cookie会话方式。

内容的提问来源于stack exchange,提问作者DaWe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:13:23