2015-10-13 497 views
4

通常解释说S3上没有文件夹/目录,这是真的,但是有PREFIX对象。在某些情况下 - 例如使用riofs将文件系统“安装”到S3--知道如何创建其中的一个实际上会很有用。如何使用AWS CLI在S3上创建“类文件夹”(即PREFIX)对象?

有谁知道是否有一种“正确”的方式来使用AWS CLI执行此操作?

Amazon S3 boto - how to create a folder?

Creating a folder via s3cmd (Amazon S3)

附注:它使用低级别的API aws s3api ...

相关SO帖子很可能可能

我也想指出,在AWS控制台中,这个动作实际上被命名为“创建文件夹...”,因此告诉人们S3上没有“概念”文件夹是不公平的。

非常感谢!

+0

我用s3fuse过去之前“安装” S3作为一个文件系统。我认为当你做了一个'mkdir/var/mys3mount/newfolder /'时,它只在本地文件系统中创建文件夹,而不是在S3中创建。它给出了一个文件夹的外观,但s3在您将对象放在那里之前不会看到它。然后给你在文件夹概念的完整路径。 –

+0

Hi Greg,我在本地使用'mkdir'时看到了与riofs相同的行为,但我也看到,当S3存储桶中存在前缀对象时,riofs将创建一个本地目录来镜像它。当围绕这些“坐骑”进行自动化时,这会非常有用。 – Cawb07

回答

13

后,我身边的一些摆弄很快发现这似乎工作:

aws s3api put-object --bucket test --key dir-test/

但是如果包括它不仅工程“/”在参数--key结束。那部分感觉不正确......当然有更好的方法吗?

8

真的,在S3中确实没有目录。但是,正如您指出的那样,有前缀和分隔符,默认分隔符是/,它允许您在S3存储桶中获得非常令人信服的模拟分层目录结构。

但桶仍然只是一个包含带有键名的对象的平坦空间。如果您想要创建一个目录您必须创建一个名称包含或以分隔符结尾的密钥(默认为/)的对象。所以你上面描述的技术可能感觉不对,但这是唯一的方法。

谁想出了创建文件夹想法在控制台应该是自己感到羞耻。它引起了很多混乱。

+2

从技术上讲,这是事实,但大多数客户可能不太关心底层存储机制,它不是文件系统。 s3是一种URI方案,它们最初是作为对分层子目录的抽象而创建的。谁在乎这些不是真正的文件夹/目录。他们喜欢文件夹,他们喜欢文件夹。当解释他们不是文件夹时,期望客户不会入睡就显得很迂腐。 – Davos

0

刚刚保存的文件夹名称复制/移动和添加/目录名作为目标

DirName = "Hello" 
s3bucket = "s3://mybucket" 


os.system("aws s3 cp " + DirName + " " + s3//mybucket" + "/" + DirName + " --recursive")