自动从s3存储桶中删除旧的项目

有没有一种简单的方法来在s3中设置桶来自动删除x天以前的文件?

亚马逊现在可以设置存储桶策略来自动过期内容:

http://docs.amazonwebservices.com/AmazonS3/latest/UG/ObjectExpiration.html

与此同时,亚马逊已经推出了S3生命周期(请参阅Amazon S3 – 对象过期的介绍性博客文章),您可以在此指定存储桶中对象的最大时限(请参阅对象到期date,以了解通过S3 API或AWSpipe理安慰。

您可以使用s3cmd编写一个脚本来运行您的存储桶,并根据先决条件删除文件。

你需要在上面写一些代码(bash,python)。

您可以从http://s3tools.org/s3cmd下载s3cmd

shell脚本使用s3cmd实用程序删除旧的存储桶
来源: http : //shout.setfive.com/2011/12/05/deleting-files-older-than-specified-time-with-s3cmd-and-bash/

#!/bin/bash # Usage: ./deleteOld "bucketname" "30 days" s3cmd ls s3://$1 | while read -r line; do createDate=`echo $line|awk {'print $1" "$2'}` createDate=`date -d"$createDate" +%s` olderThan=`date -d"-$2" +%s` if [[ $createDate -lt $olderThan ]] then fileName=`echo $line|awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'` echo $fileName if [[ $fileName != "" ]] then s3cmd del "$fileName" fi fi done; 

不,S3只是一个数据存储。 您需要使用一些外部客户端来定期删除旧文件。

我发现更快的解决scheme使用AWS cli删除批处理

 #!/usr/bin/env php <?php //remove files which were created 24 hrs ago $fcmd = 'aws s3 ls s3://<bucket>/<prefix>/ | awk \'{$3=""; print $0}\'';//remove file size and handle file with spaces exec($fcmd, $output, $return_var); $seconds_24_hour = 24 * 60 * 60; $file_deleted_count = 0; if (!empty($output)) { $deleted_keys = array(); foreach ($output as $file) { $file_path = substr($file, 21); $file_time_stamp = substr($file, 0, 19); //2017-09-19 07:59:41 if (time() - strtotime($file_time_stamp) > $seconds_24_hour) { $deleted_keys[]["Key"] = "<prefix>/" . $file_path; $file_deleted_count++; } } if (!empty($deleted_keys)) { $json_data_delete = array("Objects" => $deleted_keys); echo $cmd = ("aws s3api delete-objects --bucket <bucket> --delete '" . json_encode($json_data_delete) . "'"); system($cmd); } echo "\n$file_deleted_count files deleted from content_media\n"; } 

批量删除参考https://stackoverflow.com/a/41734090/1589444

处理文件的空间与100%通案的参考https://stackoverflow.com/questions/36813327/how-to-display-only-files-from-aws-s3-ls-command