Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何在S3中删除超过7天的文件?_File_Amazon Web Services_Amazon S3_Delete File - Fatal编程技术网

File 如何在S3中删除超过7天的文件?

File 如何在S3中删除超过7天的文件?,file,amazon-web-services,amazon-s3,delete-file,File,Amazon Web Services,Amazon S3,Delete File,需要删除S3中超过7天的文件,需要一个shell脚本来完成这项工作,没有谷歌搜索的运气,我找到了下面的url 这对我们没有帮助,有人有脚本删除所有超过7天的文件吗?最简单的方法是在Amazon S3 bucket上定义 您可以指定超过一定天数的对象应过期(删除)。最好的一点是,这种情况会定期自动发生,您不需要运行自己的脚本 如果您想自己做,最好编写一个脚本(如Python)来检索文件列表并删除比某个日期早的文件 例如: 做为一个shell脚本有点麻烦。最简单的方法是在Amazon S3 buc

需要删除S3中超过7天的文件,需要一个shell脚本来完成这项工作,没有谷歌搜索的运气,我找到了下面的url


这对我们没有帮助,有人有脚本删除所有超过7天的文件吗?

最简单的方法是在Amazon S3 bucket上定义

您可以指定超过一定天数的对象应过期(删除)。最好的一点是,这种情况会定期自动发生,您不需要运行自己的脚本

如果您想自己做,最好编写一个脚本(如Python)来检索文件列表并删除比某个日期早的文件

例如:


做为一个shell脚本有点麻烦。

最简单的方法是在Amazon S3 bucket上定义

您可以指定超过一定天数的对象应过期(删除)。最好的一点是,这种情况会定期自动发生,您不需要运行自己的脚本

如果您想自己做,最好编写一个脚本(如Python)来检索文件列表并删除比某个日期早的文件

例如:

作为一个shell脚本做起来有点混乱。

谢谢,约翰

我们对代码进行了一点修改,它工作得很好

   aws s3 ls BUCKETNAME/ | while read -r line;
       do
        createDate=`echo $line|awk {'print $1" "$2'}`
        createDate=`date -d"$createDate" +%s`
        olderThan=`date --date "7 days ago" +%s`
        if [[ $createDate -lt $olderThan ]]
           then
            fileName=`echo $line|awk {'print $4'}`

            if [[ $fileName != "" ]]
            then
                    aws s3 rm BUCKETNAME/$fileName
            fi
       fi

       done; 
谢谢你,约翰

我们对代码进行了一点修改,它工作得很好

   aws s3 ls BUCKETNAME/ | while read -r line;
       do
        createDate=`echo $line|awk {'print $1" "$2'}`
        createDate=`date -d"$createDate" +%s`
        olderThan=`date --date "7 days ago" +%s`
        if [[ $createDate -lt $olderThan ]]
           then
            fileName=`echo $line|awk {'print $4'}`

            if [[ $fileName != "" ]]
            then
                    aws s3 rm BUCKETNAME/$fileName
            fi
       fi

       done; 

下面是我为我的环境编写的一个简单脚本,希望有人会发现它很有用。谢谢

而且,我的s3存储桶中的文件是
FULL\u BACKUP\u 2020-06-25.tar.gz
格式

#!/bin/bash

#Defining variables.
#Date=`date +%Y-%m-%d`
ThreeDaysOldDate=`date -d '-3 days' +%Y-%m-%d | tr -d '-'`
Obj=`/usr/local/bin/aws s3 ls s3://bucket_name/folder/ | sed -n '2,$'p | awk '{print $4}'| cut -b 13-22 | tr -d '-'`

#Comparing files older than past 3 days and removing them from S3.
for i in $Obj
do
    if [ $i -lt $ThreeDaysOldDate ]; then
        var1="FULL_BACKUP_"
        var2=".tar.gz"
        year=$(echo $i | cut -c 1-4)
        mon=$(echo $i | cut -c 5-6)
        day=$(echo $i | cut -c 7-8)
        DATE=$var1$year-$mon-$day$var2
        /usr/local/bin/aws s3 rm s3://bucket_name/folder/$DATE > /dev/null 2>&1
    fi
done

下面是我为我的环境编写的一个简单脚本,希望有人会发现它很有用。谢谢

而且,我的s3存储桶中的文件是
FULL\u BACKUP\u 2020-06-25.tar.gz
格式

#!/bin/bash

#Defining variables.
#Date=`date +%Y-%m-%d`
ThreeDaysOldDate=`date -d '-3 days' +%Y-%m-%d | tr -d '-'`
Obj=`/usr/local/bin/aws s3 ls s3://bucket_name/folder/ | sed -n '2,$'p | awk '{print $4}'| cut -b 13-22 | tr -d '-'`

#Comparing files older than past 3 days and removing them from S3.
for i in $Obj
do
    if [ $i -lt $ThreeDaysOldDate ]; then
        var1="FULL_BACKUP_"
        var2=".tar.gz"
        year=$(echo $i | cut -c 1-4)
        mon=$(echo $i | cut -c 5-6)
        day=$(echo $i | cut -c 7-8)
        DATE=$var1$year-$mon-$day$var2
        /usr/local/bin/aws s3 rm s3://bucket_name/folder/$DATE > /dev/null 2>&1
    fi
done

这将从S3存储桶中递归删除已过期159天的文件。您可以根据需要更改日期。其中包括带空格的文件名。上面的脚本不适用于带空格的文件名

注意:现有目录结构可能会被删除。如果你不喜欢目录结构,你可以用这个

如果您喜欢目录结构,请给出最后一个子目录的完整路径,并在每次执行时修改此路径以保护父目录结构

例如:

s3://BucketName/dir1/dir2/dir3/

s3://BucketName/dir1/dir2/dir4/

s3://BucketName/dir1/dir2/dir5/

vim s3\u文件\u delete.sh

s3bucket="s3://BucketName"
s3dirpath="s3://BucketName/WithOrWithoutDirectoryPath/"
aws s3 ls $s3dirpath --recursive | while read -r line;
    do
     createDate=`echo $line|awk {'print $1" "$2'}`
     createDate=`date -d"$createDate" +%s`
     olderThan=`date --date "159 days ago" +%s`
     if [[ $createDate -lt $olderThan ]]
        then
         fileName=`echo $line|awk '{a="";for (i=4;i<=NF;i++){a=a" "$i}print a}' |awk '{ sub(/^[ \t]+/, ""); print }'`

         if [[ $fileName != "" ]]
         then
                 #echo "$s3bucket/$fileName"
                 aws s3 rm "$s3bucket/$fileName"
         fi
    fi

    done;
s3bucket=“s3://BucketName”
s3dirpath=“s3://BucketName/WithOrWithoutDirectoryPath/”
aws s3 ls$s3dirpath——递归的读r行;
做
createDate=`echo$line | awk{'print$1”“$2'}`
createDate=`date-d“$createDate”+%s`
olderThan=`date--date“159天前”+%s`
如果[[$createDate-lt$olderThan]]
然后

fileName=`echo$line | awk'{a=“”;for(i=4;i这将从S3存储桶中递归删除已过期159天的文件。您可以根据需要更改天数。其中包括带空格的文件名。上述脚本不适用于带空格的文件名

注意:现有目录结构可能会被删除。如果您不喜欢目录结构,可以使用此选项

如果您喜欢目录结构,请给出最后一个子目录的完整路径,并在每次执行时修改此路径以保护父目录结构

例如:

s3://BucketName/dir1/dir2/dir3/

s3://BucketName/dir1/dir2/dir4/

s3://BucketName/dir1/dir2/dir5/

vim s3\u文件\u delete.sh

s3bucket="s3://BucketName"
s3dirpath="s3://BucketName/WithOrWithoutDirectoryPath/"
aws s3 ls $s3dirpath --recursive | while read -r line;
    do
     createDate=`echo $line|awk {'print $1" "$2'}`
     createDate=`date -d"$createDate" +%s`
     olderThan=`date --date "159 days ago" +%s`
     if [[ $createDate -lt $olderThan ]]
        then
         fileName=`echo $line|awk '{a="";for (i=4;i<=NF;i++){a=a" "$i}print a}' |awk '{ sub(/^[ \t]+/, ""); print }'`

         if [[ $fileName != "" ]]
         then
                 #echo "$s3bucket/$fileName"
                 aws s3 rm "$s3bucket/$fileName"
         fi
    fi

    done;
s3bucket=“s3://BucketName”
s3dirpath=“s3://BucketName/WithOrWithoutDirectoryPath/”
aws s3 ls$s3dirpath——递归的读r行;
做
createDate=`echo$line | awk{'print$1”“$2'}`
createDate=`date-d“$createDate”+%s`
olderThan=`date--date“159天前”+%s`
如果[[$createDate-lt$olderThan]]
然后

fileName=`echo$line | awk'{a=“”;for(i=4;i感谢您的回答,我稍微修改了其中的一个,因为它能够在MacOsX上执行shell脚本(我用高分辨率测试)


感谢您的回答,我稍微修改了中的一个,以便能够在MacOsX上执行shell脚本(我使用High Sierra进行了测试)


我一直在寻找s3cmd命令来删除超过N天的文件,下面是我的工作原理

s3cmd ls s3://your-address-here/ | awk -v dys="2" 'BEGIN { depoch=(dys*86400);cepoch=(systime()-depoch) } { gsub("-"," ",$1);gsub(":"," ",$2 );if (mktime($1" "$2" 00")<=cepoch) { print "s3cmd del "$4 } }' | bash

s3cmd ls s3://your address here/|awk-v dys=“2”BEGIN{depoch=(dys*86400);cepoch=(systime()-depoch)}{gsub(“-”,”,$1);gsub(“:”,”“,$2);if(mktime($1”“$2“00”)我正在寻找s3cmd命令来删除超过N天的文件,下面是对我有效的方法

s3cmd ls s3://your-address-here/ | awk -v dys="2" 'BEGIN { depoch=(dys*86400);cepoch=(systime()-depoch) } { gsub("-"," ",$1);gsub(":"," ",$2 );if (mktime($1" "$2" 00")<=cepoch) { print "s3cmd del "$4 } }' | bash

s3cmd ls s3://your address here/|awk-v dys=“2”BEGIN{depoch=(dys*86400);cepoch=(systime()-depoch)}{gsub(“-”,”,$1);gsub(“:”,“,”,$2);if(mktime($1”“$2“00”)在aws s3 rm rm的开头添加s3://BUCKETNAME/$fileName
语法错误:“完成”意外(预期为“then”)
@UmairAyub你能解决它吗?@mba3gar这是对我有效的解决方案这很酷,谢谢!我只需要在s3命令中添加--recursive:
aws s3 ls BUCKETNAME/--recursive
脚本就可以处理包含斜杠字符的路径,如aws s开头的
BUCKETNAME/V1/V2/
add s3://3 rm s3://BUCKETNAME/$fileName
语法错误:“完成”意外(应为“then”)
@UmairAyub你能解决它吗?@mba3gar这是对我有效的解决方案这很酷,谢谢!我只需要在s3命令中添加--recursive:
aws s3 ls BUCKETNAME/--recursive
脚本就可以处理包含斜杠字符的路径,如
BUCKETNAME/V1/V2/