如何筛选S3中Glacier存储类的指定文件夹并导出为CSV?
筛选S3指定前缀下Glacier存储类对象并导出CSV的方法
方法一:使用AWS CLI
直接通过CLI命令指定前缀筛选,同时过滤存储类,最终输出CSV文件:
# 替换YOUR_BUCKET_NAME为你的桶名 aws s3api list-objects-v2 --bucket YOUR_BUCKET_NAME --prefix "Example/yxz/" --query 'Contents[?StorageClass==`GLACIER`].[Key,StorageClass,Size,LastModified]' --output text | awk '{print $1","$2","$3","$4}' > glacier_objects.csv
命令说明:
--prefix "Example/yxz/":指定要筛选的目标前缀(S3中无实际文件夹,前缀模拟文件夹结构,结尾的/确保只匹配该“文件夹”下的对象)--query 'Contents[?StorageClass==GLACIER].[Key,StorageClass,Size,LastModified]':筛选存储类为GLACIER的对象,并指定要导出的字段awk '{print $1","$2","$3","$4}':将CLI输出的文本格式转为CSV分隔格式- 最终结果会写入当前目录下的
glacier_objects.csv文件
如果需要匹配Glacier Deep Archive,只需将GLACIER替换为DEEP_ARCHIVE即可。
方法二:使用Python脚本(适合复杂场景)
如果需要更灵活的字段处理或大量对象分页处理,用boto3编写脚本:
import boto3 import csv # 替换为你的桶名和目标前缀 bucket_name = 'YOUR_BUCKET_NAME' prefix = 'Example/yxz/' output_file = 'glacier_objects.csv' # 初始化S3客户端 s3 = boto3.client('s3') # 写入CSV文件 with open(output_file, 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['对象路径', '存储类', '大小(字节)', '最后修改时间'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 分页获取对象,避免单次请求数量限制 paginator = s3.get_paginator('list_objects_v2') for page in paginator.paginate(Bucket=bucket_name, Prefix=prefix): if 'Contents' not in page: continue # 遍历当前页的对象,筛选Glacier存储类 for obj in page['Contents']: if obj['StorageClass'] in ('GLACIER', 'DEEP_ARCHIVE'): writer.writerow({ '对象路径': obj['Key'], '存储类': obj['StorageClass'], '大小(字节)': obj['Size'], '最后修改时间': obj['LastModified'].isoformat() })
脚本说明:
- 自动处理大量对象的分页请求,避免API限制
- 同时支持筛选GLACIER和DEEP_ARCHIVE两种存储类
- 自定义CSV表头,输出更易读的字段名
- 运行前确保已配置AWS凭证(环境变量、
~/.aws/credentials等)
内容的提问来源于stack exchange,提问作者user19378169
相关产品推荐
相关产品推荐

