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

使用Shell脚本下载AWS S3指定路径下所有同名B01.tif文件咨询

S3指定文件批量下载解决方案

你原脚本的核心问题是硬编码路径层级且仅取第一个子文件夹,完全不需要写多层循环,直接用aws cli的递归遍历能力就能实现需求,完整可直接运行的脚本如下:

#!/bin/bash
# 自定义配置项
TARGET_ROOT_PATH="s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/"
DOWNLOAD_FILE_NAME="B01.tif"

# 递归检索所有目标文件并下载
aws s3 ls "${TARGET_ROOT_PATH}" --recursive --no-sign-request | grep "${DOWNLOAD_FILE_NAME}" | while read -r file_info; do
    # 提取文件在桶内的相对路径,拼接成完整S3路径
    relative_path=$(echo "${file_info}" | awk '{print $4}')
    full_s3_path="${TARGET_ROOT_PATH}${relative_path}"
    
    # 提取B01.tif所在的父文件夹名称,用于生成保存文件名
    parent_folder=$(echo "${full_s3_path}" | awk -F '/' '{print $(NF-1)}')
    save_name="${parent_folder}${DOWNLOAD_FILE_NAME}"
    
    # 执行下载
    echo "下载中:${full_s3_path} -> ${save_name}"
    aws s3 cp "${full_s3_path}" --no-sign-request "./${save_name}"
done

脚本说明

  • 自动递归遍历根路径下所有年份、月份、子目录,无需手动调整循环层级
  • 命名规则完全匹配需求:自动提取B01.tif的父文件夹名拼接成最终文件名,比如示例路径会生成S2A_7VEG_20170205_0_L2AB01.tif
  • 所有请求自动加无凭证参数,适配公开存储桶的访问要求

可选调整项

  • 如需限定仅下载指定年份/月份的文件,修改TARGET_ROOT_PATH即可,例如下载2017年的文件就改为s3://sentinel-cogs/sentinel-s2-l2a-cogs/7/V/EG/2017/
  • 如需修改本地保存目录,将./${save_name}中的./替换为目标文件夹绝对路径即可
  • 如需跳过已存在的文件避免重复下载,可以在cp命令中加--no-clobber参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:57:04