如何快速将含100万文件的S3桶内所有文件列表导出至TXT文件?
高效导出S3百万级文件列表到TXT的方法
s3cmd处理百万级文件确实效率极低,试试下面这几种更高效的方案:
方案一:用AWS CLI快速导出
AWS官方的CLI工具在API调用和并发处理上比s3cmd优化得多,直接用list-objects-v2配合jq提取文件名:
aws s3api list-objects-v2 --bucket bucket01 --query 'Contents[].Key' --output json | jq -r '.[]' > s3_files.txt
--query参数只筛选出文件的Key(路径+文件名),减少数据传输量- jq负责把JSON数组转成每行一个的文本格式,方便直接保存
- 这个命令会自动处理分页,默认并发数足够应对百万级文件,速度能比
s3cmd快几十倍
如果没有jq,也可以用纯AWS CLI输出:
aws s3api list-objects-v2 --bucket bucket01 --output text --query 'Contents[].Key' | tr '\t' '\n' > s3_files.txt
方案二:用S3 Inventory(最适合超大量文件)
如果文件量超过百万甚至到亿级,本地跑命令还是可能受带宽限制,直接用S3自带的Inventory功能:
- 登录AWS控制台,进入目标桶的「管理」标签,找到「库存」选项
- 创建新的库存配置:选择要生成清单的桶,设置目标存储桶(可以是同一桶或其他桶),只勾选「键」字段来精简输出
- 配置生成频率(比如每日一次),S3会在后台自动扫描所有文件,生成CSV格式的清单文件
- 等清单生成后,下载解压就能得到完整的文件列表,全程不需要本地计算资源,完全避免超时问题
方案三:用Python脚本自定义控制并发
如果需要更灵活的控制,用boto3写个简单脚本:
import boto3 from botocore.config import Config # 提高并发连接数,加快扫描速度 config = Config(max_pool_connections=50) s3 = boto3.client('s3', config=config) bucket_name = 'bucket01' with open('s3_files.txt', 'w') as file: paginator = s3.get_paginator('list_objects_v2') for page in paginator.paginate(Bucket=bucket_name): for obj in page['Contents']: file.write(f"{obj['Key']}\n")
这个脚本可以根据本地网络情况调整max_pool_connections的值,进一步提升扫描速度。
内容的提问来源于stack exchange,提问作者Dyck Anthony
相关产品推荐
相关产品推荐

