【问题标题】:Delete files under S3 bucket recursively without deleting folders using python递归删除S3存储桶下的文件而不使用python删除文件夹
【发布时间】:2020-09-21 19:45:47
【问题描述】:

当我尝试删除特定文件夹下的所有文件时出现错误 问题在这里 ['Key': 'testpart1/.'] 我也想删除 30 天前的文件,请帮我写脚本

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my-bucket')

response = my_bucket.delete_objects(
    Delete={
        'Objects': [
            {
                'Key': 'testpart1/*.*'   # the_name of_your_file
            }
        ]
    }

【问题讨论】:

  • delete_objects() 命令需要一个要删除的对象列表。它接受通配符(例如/*)。您首先需要获取对象列表,然后将这些密钥(文件名)传递给delete_objects() 命令。如果您希望删除超过 30 天的对象,您可以使用对象列表中的 LastModified 日期来确定是否删除这些对象。
  • 仅供参考,Amazon S3 Object lifecycle management 可以自动删除 S3 中超过给定天数的对象。如果您要定期清除存储桶(或文件夹)的旧文件,这将非常有用。

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

下面的代码会递归删除前缀下的所有文件:

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my-bucket')

response = my_bucket.objects.filter(Prefix="testpart1/").delete()

请检查https://stackoverflow.com/a/59146547/4214976以根据日期过滤掉对象。

【讨论】:

  • 如果我想删除 my-bucket 下的所有文件?前缀="*/"
  • 然后my_bucket.objects.all().delete() 会起作用,这将删除存储桶下的所有文件。
  • 如果桶是版本化的,你可以使用my_bucket.object_versions.delete()
  • 我认为存储桶中没有“仅文件夹”之类的东西。如果里面有文件,也没有文件夹。对吗?
  • 如果在 S3 控制台中使用“新建文件夹”按钮,它将创建一个带有文件夹名称的零长度对象。即使没有对象存在,这也会“强制”显示文件夹。所以,它是一个“模拟文件夹”。但是,通常情况下,Amazon S3 中实际上并不存在文件夹。
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 2018-11-09
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2015-06-23
相关资源
最近更新 更多