ลบรายการเก่าออกจากที่ฝากข้อมูล s3 โดยอัตโนมัติ


15

มีวิธีง่าย ๆ ในการตั้งค่า bucket ใน s3 เพื่อลบไฟล์ที่เก่ากว่า x วันโดยอัตโนมัติหรือไม่?

คำตอบ:



19

ขณะที่อเมซอนได้เปิดตัววงจรชีวิต S3 (ดูโพสต์บล็อกเบื้องต้นAmazon S3 - การหมดอายุของวัตถุ ) ซึ่งคุณสามารถระบุอายุสูงสุดเป็นวันสำหรับวัตถุในที่เก็บข้อมูล - ดูการหมดอายุของวัตถุสำหรับรายละเอียดการใช้งานผ่าน S3 API หรือ AWS Management ปลอบใจ


+1 สำหรับการให้ข้อมูลอัปเดตเกี่ยวกับข้อมูลที่ล้าสมัยนี้ขอบคุณ!
Steffen Opel

3

คุณสามารถใช้ s3cmd เพื่อเขียนสคริปต์เพื่อทำงานผ่านที่ฝากข้อมูลของคุณและลบไฟล์ตามเงื่อนไขเบื้องต้น

คุณจะต้องเขียนโค้ด (bash, python) ด้านบน

คุณสามารถดาวน์โหลด s3cmd ได้จากhttp://s3tools.org/s3cmd


3

เชลล์สคริปต์เพื่อลบถังเก่าโดยใช้ยูทิลิตี 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;

การใช้งาน: ./deleteOld "bucketname" "30 วัน" เช่น s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" ไม่เคยเพิกเฉยครั้งสุดท้าย "/"

จะทำอย่างไรถ้าชื่อไฟล์มีพื้นที่และฉันต้องการพิมพ์คอลัมน์ทั้งหมดหลังจากนั้นVideo 1280x720 (2)13201781136780000000.mp4เพียงแค่ให้วิดีโอไม่ใช่ส่วนที่เหลือ
Ramratan Gupta

ฉันได้รับคำตอบจากstackoverflow.com/a/9745022/1589444
Ramratan Gupta

1

ไม่ S3 เป็นเพียงที่เก็บข้อมูล คุณจะต้องใช้ไคลเอนต์ภายนอกเพื่อลบไฟล์เก่าเป็นระยะ


5
สิ่งนี้ไม่เป็นจริงอีกต่อไป: docs.amazonwebservices.com/AmazonS3/latest/UG/…
Tabitha

1
อานั่นทำให้สิ่งต่าง ๆ ง่ายขึ้นมาก แม้ว่าสำหรับการสำรองข้อมูลของฉันฉันยังต้องการดำเนินการลบจากสคริปต์ของฉันเพื่อให้แน่ใจว่าการสำรองข้อมูลเก่าจะถูกลบออกเฉพาะเมื่อมีการทำสำรองใหม่เรียบร้อยแล้ว
Martijn Heemels

1

ฉันพบวิธีลบชุดคำตอบที่เร็วกว่ามากโดยใช้ 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";
}

การอ้างอิงสำหรับชุดการลบ/programming//a/41734090/1589444

การอ้างอิงสำหรับการจัดการไฟล์ที่มีช่องว่างด้วยเคส pass 100% /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.