求助:用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
使用步骤:
- 保存为
s3-cleanup-verify.sh - 赋予执行权限:
chmod +x s3-cleanup-verify.sh - 执行脚本:
./s3-cleanup-verify.sh 你的桶名
注意事项
- 务必先测试:用
--dryrun或测试桶验证,避免误删重要文件 - 大文件量场景:建议分批次处理,防止命令超时
- 权限问题:确保AWS CLI使用的账号/角色拥有足够的S3操作权限
内容的提问来源于stack exchange,提问作者thiago lacerda
相关产品推荐
相关产品推荐

