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

如何使用Python+Boto3删除S3存储桶内除当日文件外的历史文件

S3 历史文件夹查找与文件删除实现方案

核心逻辑

  • 先生成当日对应的年/月/日格式路径前缀,作为唯一排除项
  • 遍历桶内所有按日期生成的三级目录前缀,和当日前缀做匹配,不一致的即为待处理的历史文件夹
  • 批量删除所有历史前缀下的存储对象

Python(boto3)代码实现

前提:已安装boto3,且环境配置好对应S3桶的读写权限

import boto3
from datetime import datetime

# 配置项
BUCKET_NAME = "替换为你的桶名"
s3_client = boto3.client("s3")

# 生成当日日期前缀,格式为 year/month/day/
today_date_prefix = datetime.today().strftime("%Y/%m/%d") + "/"

history_prefix_list = []

# 遍历所有三级日期目录
# 先遍历第一级:年目录
year_paginator = s3_client.get_paginator("list_objects_v2")
for year_page in year_paginator.paginate(Bucket=BUCKET_NAME, Delimiter="/"):
    for year_item in year_page.get("CommonPrefixes", []):
        year_prefix = year_item["Prefix"]
        # 遍历第二级:月目录
        month_resp = s3_client.list_objects_v2(Bucket=BUCKET_NAME, Prefix=year_prefix, Delimiter="/")
        for month_item in month_resp.get("CommonPrefixes", []):
            month_prefix = month_item["Prefix"]
            # 遍历第三级:日目录
            day_resp = s3_client.list_objects_v2(Bucket=BUCKET_NAME, Prefix=month_prefix, Delimiter="/")
            for day_item in day_resp.get("CommonPrefixes", []):
                day_prefix = day_item["Prefix"]
                # 排除当日目录,收集所有历史目录前缀
                if day_prefix != today_date_prefix:
                    history_prefix_list.append(day_prefix)

# 批量删除历史目录下的文件
for delete_prefix in history_prefix_list:
    delete_paginator = s3_client.get_paginator("list_objects_v2")
    for delete_page in delete_paginator.paginate(Bucket=BUCKET_NAME, Prefix=delete_prefix):
        if "Contents" in delete_page:
            delete_keys = [{"Key": obj["Key"]} for obj in delete_page["Contents"]]
            s3_client.delete_objects(Bucket=BUCKET_NAME, Delete={"Objects": delete_keys})

提示:测试阶段可以先把删除操作替换成打印待删除的key,确认筛选逻辑完全正确后再执行真实删除,避免误删数据

AWS CLI 快速实现

如果不需要复杂自定义逻辑,直接用CLI命令即可完成操作:

# 生成当日日期前缀
TODAY_PREFIX=$(date +"%Y/%m/%d/")
# 测试:查看待删除文件列表
aws s3 rm s3://替换为你的桶名/ --recursive --exclude "${TODAY_PREFIX}*" --dryrun
# 确认无误后,去掉--dryrun执行真实删除

小提示:如果桶内文件量极大,建议使用S3批量删除任务提升执行效率,避免长耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:24:03