使用aws-cli按特定文件名筛选从S3下载文件的方法
问题
我的S3存储桶里有这样的文件结构:
s3://bucket/folder1/folder11/mylog.log s3://bucket/folder1/folder12/mylog.log s3://bucket/folder2/folder21/folder211/mylog.log s3://bucket/folder3/folder31/mylog.log s3://bucket/folder4/mylog.log ....
想下载所有名为mylog.log的文件,该怎么做?
解决方案
分享两种实用的批量下载方法,均通过AWS CLI操作:
方法一:用s3 sync配合过滤规则
这是最简洁的方式,通过筛选规则精准匹配目标文件:
aws s3 sync s3://bucket ./your-local-folder \ --exclude "*" \ --include "*/mylog.log"
- 说明:先通过
--exclude "*"排除所有文件,再用--include "*/mylog.log"选中所有层级路径下的mylog.log,最后同步到本地的your-local-folder目录(替换为你实际要存储文件的本地路径)。
方法二:先查找文件路径再批量下载
如果需要先确认要下载的文件列表,这种分步方式更直观:
aws s3 ls s3://bucket --recursive | grep "mylog.log$" | awk '{print $4}' | xargs -I {} aws s3 cp s3://bucket/{} ./your-local-folder/
- 说明:
aws s3 ls ... --recursive递归列出存储桶内所有文件;grep "mylog.log$"筛选出文件名恰好为mylog.log的条目;awk '{print $4}'提取文件的相对路径;xargs ...将每个路径对应的文件下载到本地目录。
注意事项
- 执行命令前需确保AWS CLI已配置好访问权限(运行
aws configure完成配置); - 替换命令中的
bucket为你的存储桶名称,your-local-folder为本地目标路径。
内容的提问来源于stack exchange,提问作者Tommy Yu
相关产品推荐
相关产品推荐

