如何通过CSV文件使用gsutil批量下载指定GCS存储桶文件?
如何通过CSV文件批量从GCS存储桶下载指定文件?
当然可以!用CSV配合gsutil完全能实现精准批量下载,不用再逐个点或者下载整个文件夹浪费时间,我来给你一步步拆解操作方法:
第一步:准备好你的CSV文件列表
首先把你需要下载的65个文件整理成CSV,这里有两种方式:
- 推荐:每行写完整的GCS文件路径,这样最不容易出错,比如:
gs://your-target-bucket/docs/report-2024-01.pdf gs://your-target-bucket/images/header.png gs://your-target-bucket/data/raw/set1.csv - 如果所有文件都在同一个GCS文件夹下(比如
gs://your-target-bucket/folder/),也可以只写文件名,比如:report-2024-01.pdf header.png set1.csv
注意:CSV里不要留多余的空行,否则会导致命令尝试下载空路径报错。如果文件名包含空格或特殊字符,记得用双引号把路径包起来(比如"gs://bucket/folder/file with space.txt")。
第二步:用命令读取CSV批量下载
根据你的CSV格式,选对应的命令就行:
情况1:CSV里是完整GCS路径
方法1:用xargs快速执行(适合大多数场景)
这个方法简洁高效,直接把CSV里的每行作为参数传给gsutil:
cat your-file-list.csv | xargs -I {} gsutil cp {} /your/local/destination/folder/
如果想开启并行下载(和gsutil -m一样提升速度),可以用parallel工具(如果没装,Linux用apt install parallel,Mac用brew install parallel):
cat your-file-list.csv | parallel gsutil cp {} /your/local/destination/folder/
可以加--jobs N参数控制并发数,比如--jobs 10,避免请求过多被限制。
方法2:用bash循环(更直观,适合新手调试)
如果想看到每个文件的下载进度或调试问题,用循环更清晰:
while IFS= read -r file_path; do echo "正在下载:$file_path" gsutil cp "$file_path" /your/local/destination/folder/ done < your-file-list.csv
这里的IFS=和read -r是为了正确处理带空格或特殊字符的文件名,别漏掉哦。
情况2:CSV里只有文件名(统一在某个GCS文件夹下)
只需要在循环里给每个文件名加上GCS前缀就行:
while IFS= read -r filename; do gsutil cp "gs://your-target-bucket/folder/$filename" /your/local/destination/folder/ done < your-file-list.csv
小提示
下载完成后,可以用简单的命令验证是否所有文件都成功下载:
# 统计CSV里的文件数 wc -l your-file-list.csv # 统计本地文件夹的文件数 ls /your/local/destination/folder/ | wc -l
如果数字一致,基本就没问题啦。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

