Tự động xóa các mục cũ khỏi s3 xô


15

Có cách nào dễ dàng để thiết lập một nhóm trong s3 để tự động xóa các tệp cũ hơn x ngày không?

Câu trả lời:



19

Trong khi đó, Amazon đã giới thiệu vòng đời S3 (xem bài đăng trên blog giới thiệu Amazon S3 - Hết hạn đối tượng ), trong đó bạn có thể chỉ định tuổi tối đa tính bằng ngày cho các đối tượng trong một nhóm - xem Chi tiết hết hạn đối tượng sử dụng thông qua API S3 hoặc Quản lý AWS Bảng điều khiển.


+1 để cung cấp bản cập nhật liên quan đến thông tin lỗi thời này, cảm ơn!
Steffen Opel

3

Bạn có thể sử dụng s3cmd để viết một tập lệnh để chạy qua nhóm của bạn và xóa các tệp dựa trên điều kiện tiên quyết.

Bạn sẽ cần phải viết một số mã (bash, python) lên trên nó.

Bạn có thể tải xuống s3cmd từ http://s3tools.org/s3cmd


3

shell script để xóa các thùng cũ bằng
nguồn tiện ích 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;

Cách sử dụng: ./deleteOld "xô tên" "30 ngày", vd. s3: // dir1 / dir2 / dir3 / buckname = "dir1 / dir2 / dir3 /" đừng bao giờ bỏ qua lần cuối "/"

Điều gì xảy ra nếu tên tệp có không gian và tôi cần in tất cả các cột sau đó, Video 1280x720 (2)13201781136780000000.mp4chỉ cung cấp cho Video chứ không phải phần còn lại.
Ramratan Gupta

Tôi đã nhận được giải pháp từ stackoverflow.com/a/9745022/1589444
Ramratan Gupta

1

Không, S3 chỉ là một kho dữ liệu. Bạn sẽ cần sử dụng một số máy khách bên ngoài để định kỳ xóa các tệp cũ.


5
Điều này không còn đúng nữa: docs.amazonwebservice.com/AmazonS3/latest/UG/ mẹo
Tabitha

1
Ah, điều đó làm cho mọi thứ dễ dàng hơn nhiều. Mặc dù, đối với các bản sao lưu của tôi, tôi vẫn thích thực hiện xóa khỏi tập lệnh của mình, để đảm bảo các bản sao lưu cũ hơn chỉ bị xóa khi một bản sao mới đã được thực hiện thành công.
Martijn Heemels

1

Tôi tìm thấy giải pháp xóa hàng loạt nhanh hơn bằng cách sử dụng 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";
}

Tham khảo để xóa hàng loạt /programming//a/41734090/1589444

Tham chiếu để xử lý tệp có dung lượng với 100% trường hợp vượt qua /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.