删除 S3 上不存在的文件会删除该文件夹(如果这是最后一个文件)。我们如何防止这种情况发生?



那么,我在S3上有以下结构:

mainbucket

  • 数据处理/
  • 声明/

我们有DataFeeds/文件夹被删除的事件!因此,我测试了以下内容:

aws s3api put-object --bucket mainbucket --key DataFeeds/.donotdelete 

但是,如果我执行这个(删除blah.txt,即使它不存在)DataFeeds/文件夹也被删除:

aws s3 rm s3://mainbucket/DataFeeds/blah.txt

那么,我们如何防止在S3上删除文件夹呢?

版本使用:aws-cli/2.2.46 Python/3.9.7 Darwin/20.6.0 source/x86_64 prompt/off

Amazon S3中不存在文件夹。它是一个"平面"存储服务,对象的Key(文件名)包含完整路径,包括目录。

Amazon S3将为您"模拟"文件夹。例如,如果您将文件上传到invoices/january.txt,那么invoices目录将"神奇地"出现。如果随后删除该对象,则该目录将"消失"。这是因为它从未真正存在过。

如果你使用创建文件夹按钮,它将创建一个与目录名称相同的零长度对象。. 这将"强制"该目录出现在bucket清单中。如果没有具有相同前缀(路径)的对象,删除零长度对象将导致目录消失。

使用S3的最佳建议是假装文件夹存在

. 您可以将对象放在任何路径中,然后(假装)目录就会神奇地出现。不要担心目录会消失,因为它们实际上从未存在过!如果你真的需要空目录,使用创建文件夹按钮来创建零长度对象。它会一直存在,直到你删除零长度的对象。