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

使用PowerShell删除S3桶14天前文件脚本误删全部文件问题排查

PowerShell S3文件删除脚本错误分析

核心错误点

  • 时间比较逻辑反向+时区不匹配
    你需要删除早于14天的文件,对应判断逻辑应为文件时间 < 14天前的时间节点,但你过滤用的运算符是-ge(大于等于),反而筛选出了最近14天的文件执行删除。同时aws s3 ls返回的时间是UTC标准时间,你直接用本地时间生成的$limit_date做比较,时区差会导致时间判断完全错位,极端场景下所有文件都会被判定为符合删除条件。
  • 文本解析逻辑不可靠
    aws s3 ls的输出字段之间可能存在多个连续空格,直接用split(' ')拆分可能生成空值;如果文件名包含空格,用split(' ')[-1]只能取到文件名的最后一段,会导致误删或者找不到文件。另外输出中的子前缀(子目录)会标注PRE标识,你没有过滤这类非文件条目,执行删除时会报错。
  • 日期解析逻辑不严谨
    你用ParseExact仅指定了yyyy-MM-dd格式,解析出的文件日期是当天0点的未指定时区时间,而Get-Date返回的是带时分秒的本地时间,两者比较时会出现预期外的偏差。

修复后参考脚本

# 配置桶名和前缀
$bucket = "neb-migration"
$prefix = "ms-sql/"
# 生成14天前的UTC日期,和S3返回的时间时区对齐
$limitUtcDate = (Get-Date).ToUniversalTime().AddDays(-14).Date

# 直接调用s3api按条件筛选,避免解析文本的不确定性
$toDeleteKeys = aws s3api list-objects-v2 --bucket $bucket --prefix $prefix --query "Contents[?LastModified < '$($limitUtcDate.ToString("yyyy-MM-dd"))'].Key" --output json | ConvertFrom-Json

# 批量删除符合条件的文件
foreach ($key in $toDeleteKeys) {
    Write-Host "正在删除:s3://$bucket/$key"
    aws s3 rm "s3://$bucket/$key"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:30:00