如何从Google Cloud Storage批量下载文件并存入独立文件夹
批量下载GCS文件并分别存入独立文件夹
不管是gsutil -m cp还是gcloud storage cp,都没有直接的内置参数实现“每个文件自动存入独立文件夹”,但通过简单的Bash循环就能轻松实现需求,以下是具体方案:
方法一:使用 gsutil -m cp
- 先把筛选好的所有GCS文件路径整理到一个文本文件(比如
gcs_files.txt),每行一个路径:gs://your-bucket/path/file1.dat gs://your-bucket/path/file2.log gs://your-bucket/path/subdir/file3.csv - 执行以下Bash循环脚本,会为每个文件创建以**文件名(去掉后缀)**命名的文件夹,并将文件下载进去:
while read -r gcs_path; do # 提取文件名(如file1.dat) filename=$(basename "$gcs_path") # 生成文件夹名(去掉后缀,如file1) folder_name="${filename%.*}" # 创建文件夹(-p确保父目录不存在时也能创建) mkdir -p "$folder_name" # 并行下载文件到目标文件夹 gsutil -m cp "$gcs_path" "$folder_name/" done < gcs_files.txt
方法二:使用 gcloud storage cp
gcloud storage cp和gsutil cp用法高度兼容,同样可以用循环实现,仅需替换下载命令:
while read -r gcs_path; do filename=$(basename "$gcs_path") folder_name="${filename%.*}" mkdir -p "$folder_name" # gcloud storage cp 默认支持并行,也可加--parallel-threads调整线程数 gcloud storage cp "$gcs_path" "$folder_name/" done < gcs_files.txt
自定义文件夹名称
如果不想用文件名生成文件夹,可修改文本文件为“GCS路径 自定义文件夹名”的格式(每行两列):
gs://your-bucket/path/file1.dat sample-data-1 gs://your-bucket/path/file2.log log-archive-2
然后调整循环脚本:
while read -r gcs_path folder_name; do mkdir -p "$folder_name" gsutil -m cp "$gcs_path" "$folder_name/" # 或用gcloud命令:gcloud storage cp "$gcs_path" "$folder_name/" done < gcs_files.txt
内容的提问来源于stack exchange,提问作者Pratiksha Pradhan
相关产品推荐
相关产品推荐

