通过终端批量下载Google Cloud中Zip文件的技术问询
我来帮你解决Google Cloud存储中批量下载Zip文件的问题!你之前用curl出错,是因为直接用的是网页端的URL(https://storage.cloud.google.com/...),这是网页展示链接,不是可直接下载的对象存储链接,而且curl处理GCS的权限和批量操作远不如官方工具顺手。下面给你两种靠谱的解决方案:
一、先搞定前置准备:安装并配置gsutil
gsutil是Google Cloud官方的命令行工具,专门用来操作云存储,批量操作超方便:
- 先安装Google Cloud SDK(包含gsutil),如果已经装过就跳过这步
- 运行
gcloud auth login,跟着浏览器提示登录你的GCP账号,确保你有目标存储桶的读取权限
二、批量下载的两种方式(串行/并行)
假设你已经把所有要下载的文件路径整理到了gcs_files.txt里,注意路径格式必须是gs://bucket-name/xxx/xxx.zip(比如gs://my-bucket/docs/report.zip),每行一个路径。
方式1:串行下载(简单稳妥)
写个简单的bash脚本,逐个下载文件:
#!/bin/bash while read -r file_path; do echo "正在下载:$file_path" gsutil cp "$file_path" ./ done < gcs_files.txt
把这段代码存成download.sh,给它加执行权限chmod +x download.sh,运行./download.sh就会按顺序下载所有文件到当前目录。
方式2:并行下载(速度更快)
如果文件数量多,想提速的话,用gsutil的并行模式,它会自动开启多线程同时下载:
gsutil -m cp -I ./ < gcs_files.txt
参数解释:
-m:启用并行操作模式-I:从标准输入读取要下载的文件路径(也就是从你的txt文件里读)./:指定下载文件保存到当前目录
三、如果非要用curl怎么办?
要是你坚持想用curl,得先把文件转换成可直接下载的签名URL(因为私有存储桶的文件不能直接用网页URL下载):
- 先生成签名URL:用
gsutil signurl -d 1h your-service-account-key.json gs://bucket-name/file.zip,这里-d 1h表示URL有效期1小时,your-service-account-key.json是你的服务账号密钥文件 - 把所有生成的签名URL整理到
signed_urls.txt里,然后用下面的脚本批量下载:
#!/bin/bash while read -r url; do # 从URL里提取文件名(去掉后面的参数) filename=$(basename "$url" | cut -d'?' -f1) echo "正在下载:$filename" curl -o "$filename" "$url" done < signed_urls.txt
不过这种方法需要管理服务账号密钥,步骤繁琐,还是优先推荐用gsutil。
四、注意事项
- 确保你的txt文件里每行都是有效的
gs://路径,不要有多余空格或空行 - 如果存储桶是私有的,一定要确认你的账号有
storage.objects.get权限 - 并行下载时不用太担心配额,个人使用的话完全没问题
内容的提问来源于stack exchange,提问作者heroZero
相关产品推荐
相关产品推荐

