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

iye*_*and 1 amazon-s3 amazon-web-services

所以,我在 S3 上有以下结构:

主桶

  • 数据源/
  • 陈述/

DataFeeds/我们遇到了文件夹被删除的事件!所以,我测试了以下内容:

aws s3api put-object --bucket mainbucket --key DataFeeds/.donotdelete 
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行此操作(blah.txt即使不存在也删除),该DataFeeds/文件夹也会被删除:

aws s3 rm s3://mainbucket/DataFeeds/blah.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*ein 5

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

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

如果您使用S3 管理控制台中的“创建文件夹”按钮,它将创建一个与目录同名的零长度对象。这将“强制”目录出现在存储桶列表中。如果不存在具有相同前缀(路径)的对象,则删除零长度对象将导致目录消失。

使用 S3 的最佳建议是假装文件夹存在。您可以将对象放置在任何路径中,(假装)目录将神奇地出现。不要担心目录会消失,因为它们实际上从未存在过!

如果您确实需要保留空目录,请使用“创建文件夹”按钮来创建零长度对象。它会一直存在,直到您删除零长度对象。

  • 现在这终于有意义了!哇! (2认同)