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

求助:用AWS CLI删除S3桶30天以上旧文件并验证的Bash脚本

Bash脚本实现S3旧文件清理与剩余文件验证

前提准备

  • 确保已安装并配置AWS CLI(执行aws configure完成密钥、区域配置)
  • 拥有目标S3桶的s3:ListBucket和s3:DeleteObject权限

1. 清理30天以上的旧文件

方法一:简单筛选法(适合快速操作)

先通过测试命令确认要删除的文件,无误后再执行实际删除:

# 测试模式(仅输出待删除文件,不执行删除)
aws s3 rm s3://你的桶名/ --recursive --dryrun | grep "$(date -d '-30 days' +%Y-%m-%d)"

# 确认后执行实际删除,去掉--dryrun参数
aws s3 rm s3://你的桶名/ --recursive | grep "$(date -d '-30 days' +%Y-%m-%d)"

提示:该方法依赖文件LastModified日期与date输出格式匹配,适合大多数场景。

方法二:精确时间戳筛选法(更可靠)

通过API获取文件时间戳,和30天前的时间戳对比,精准筛选待删文件:

BUCKET_NAME="你的桶名"
# 计算30天前的Unix时间戳(秒)
THIRTY_DAYS_AGO=$(($(date +%s) - 30*24*3600))

# 获取所有需要删除的文件路径
DELETE_KEYS=$(aws s3api list-objects-v2 --bucket "$BUCKET_NAME" --query "Contents[?LastModified <= '$THIRTY_DAYS_AGO'].Key" --output text)

# 逐一删除文件
for KEY in $DELETE_KEYS; do
  echo "正在删除:$KEY"
  aws s3 rm "s3://$BUCKET_NAME/$KEY"
done

注意:如果桶内文件量极大,list-objects-v2会分页,可添加--continuation-token处理分页(新手先从小桶测试)。

2. 验证剩余文件中最旧的那个

执行以下命令,即可获取剩余文件里最早的记录:

BUCKET_NAME="你的桶名"

# 列出所有文件的修改时间和路径,按时间排序后取第一行
aws s3api list-objects-v2 --bucket "$BUCKET_NAME" --query "Contents[].[LastModified, Key]" --output text | sort | head -n 1

输出示例:

2024-05-10T12:34:56Z  docs/oldest-report.pdf

整合为完整Bash脚本

把上述步骤整合,加上参数检查和友好提示:

#!/bin/bash

# 检查参数是否正确
if [ $# -ne 1 ]; then
  echo "使用方法: $0 <你的桶名>"
  exit 1
fi

BUCKET_NAME="$1"
THIRTY_DAYS_AGO=$(($(date +%s) - 30*24*3600))

echo "=== 开始清理30天以上的旧文件 ==="
# 获取待删除文件列表
DELETE_KEYS=$(aws s3api list-objects-v2 --bucket "$BUCKET_NAME" --query "Contents[?LastModified <= '$THIRTY_DAYS_AGO'].Key" --output text)

if [ -z "$DELETE_KEYS" ]; then
  echo "没有符合条件的旧文件需要删除"
else
  for KEY in $DELETE_KEYS; do
    echo "删除: s3://$BUCKET_NAME/$KEY"
    aws s3 rm "s3://$BUCKET_NAME/$KEY"
  done
  echo "清理完成"
fi

echo -e "\n=== 验证剩余文件中最旧的文件 ==="
OLD_FILE=$(aws s3api list-objects-v2 --bucket "$BUCKET_NAME" --query "Contents[].[LastModified, Key]" --output text | sort | head -n 1)

if [ -z "$OLD_FILE" ]; then
  echo "桶内已无剩余文件"
else
  echo "最旧文件信息:"
  echo "$OLD_FILE"
fi

使用步骤:

  1. 保存为s3-cleanup-verify.sh
  2. 赋予执行权限:chmod +x s3-cleanup-verify.sh
  3. 执行脚本:./s3-cleanup-verify.sh 你的桶名

注意事项

  • 务必先测试:用--dryrun或测试桶验证,避免误删重要文件
  • 大文件量场景:建议分批次处理,防止命令超时
  • 权限问题:确保AWS CLI使用的账号/角色拥有足够的S3操作权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:18:20