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

问题描述

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

主桶

我们遇到了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-web-servicesamazon-s3

解决方案


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

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

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

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

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


推荐阅读