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

如何编写Shell脚本删除Amazon S3中7天以上的旧文件?

解决Amazon S3删除7天以上旧文件的Shell脚本方案

别担心,我来给你几个经过验证、可以直接使用的Shell脚本方案,帮你批量清理S3中超过7天的旧文件。

方法一:使用AWS CLI(推荐,官方工具更稳定)

AWS CLI是亚马逊官方提供的命令行工具,功能全面且维护及时,优先推荐使用。

前提条件

  • 已安装AWS CLI:如果没装,可以通过包管理器(如apt install awscli或brew install awscli)安装
  • 已配置AWS凭证:运行aws configure输入你的Access Key、Secret Key、默认区域等信息

脚本示例

#!/bin/bash

# 配置参数:替换成你的S3桶名和需要保留的天数
BUCKET_NAME="your-target-bucket"
RETAIN_DAYS=7

# 计算UTC格式的截止日期(S3文件的LastModified字段使用UTC时间,避免时区误差)
CUTOFF_DATE=$(date -d "-$RETAIN_DAYS days" +%Y-%m-%dT%H:%M:%SZ)

# 列出所有超过截止日期的文件并批量删除
# 注:如果文件数量极大,可以添加--page-size 1000参数提升列表效率
aws s3api list-objects-v2 --bucket "$BUCKET_NAME" \
    --query "Contents[?LastModified < '$CUTOFF_DATE'].Key" \
    --output text | tr '\t' '\n' | while read -r FILE_KEY; do
    if [ -n "$FILE_KEY" ]; then
        echo "正在删除文件:s3://$BUCKET_NAME/$FILE_KEY"
        aws s3 rm "s3://$BUCKET_NAME/$FILE_KEY"
    fi
done

优化建议(针对大量文件)

如果你的S3桶中有上万级别的文件,用xargs替代while循环可以大幅提升删除效率:

#!/bin/bash

BUCKET_NAME="your-target-bucket"
RETAIN_DAYS=7
CUTOFF_DATE=$(date -d "-$RETAIN_DAYS days" +%Y-%m-%dT%H:%M:%SZ)

aws s3api list-objects-v2 --bucket "$BUCKET_NAME" \
    --query "Contents[?LastModified < '$CUTOFF_DATE'].Key" \
    --output text | tr '\t' '\n' | xargs -I {} aws s3 rm "s3://$BUCKET_NAME/{}"

方法二:使用s3cmd(如果你已经在使用这个工具)

如果你习惯用s3cmd管理S3,也可以用以下脚本实现需求:

前提条件

  • 已安装并配置s3cmd:运行s3cmd --configure完成凭证配置

脚本示例

#!/bin/bash

BUCKET_NAME="your-target-bucket"
RETAIN_DAYS=7

# 计算截止日期(注意时区,建议和S3的UTC时间对齐)
CUTOFF_DATE=$(date -u -d "-$RETAIN_DAYS days" +%Y-%m-%d)

# 列出旧文件并删除
s3cmd ls "s3://$BUCKET_NAME/" | awk -v cutoff="$CUTOFF_DATE" '$1 < cutoff {print $4}' | while read -r FILE_PATH; do
    echo "正在删除文件:$FILE_PATH"
    s3cmd del "$FILE_PATH"
done

重要注意事项

  • 先测试再执行:把脚本中的删除命令(aws s3 rm或s3cmd del)换成echo,先确认输出的文件列表是你想要删除的,避免误删重要文件
  • 权限验证:确保你的AWS凭证或s3cmd配置拥有s3:ListBucket(列出桶内文件)和s3:DeleteObject(删除文件)的权限
  • 前缀过滤:如果只需要清理桶内某个路径下的文件,可以在list-objects-v2中添加--prefix "your/folder/path/"参数,或者在s3cmd ls中指定具体路径
  • 时区问题:S3存储的文件修改时间是UTC,所以计算截止日期时尽量使用UTC时间(如方法一中的date -d默认可能是本地时间,建议加上-u参数强制使用UTC)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:57