【问题标题】:How to create a "folder-like" (i.e. PREFIX) object on S3 using the AWS CLI?如何使用 AWS CLI 在 S3 上创建“类似文件夹”(即 PREFIX)对象?
【发布时间】:2016-01-11 20:01:53
【问题描述】:

通常解释为 S3 上没有文件夹/目录,这是真的,但是有 PREFIX 对象。在某些情况下 - 例如使用 riofs 将文件系统“挂载”到 S3 - 了解如何创建其中一个实际上可能很有用。

有谁知道是否有使用 AWS CLI 执行此操作的“正确”方法?很可能使用低级 API aws s3api ...

相关的 SO 帖子:

Amazon S3 boto - how to create a folder?

Creating a folder via s3cmd (Amazon S3)

附言

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

非常感谢!

【问题讨论】:

  • 我过去曾使用 s3fuse 将 s3 作为文件系统“挂载”。我认为当您执行mkdir /var/mys3mount/newfolder/ 时,它只在本地文件系统中创建了该文件夹,而不是在 S3 中。它给出了一个现有文件夹的外观,但 s3 在您将对象放在那里之前不会看到它。然后给你文件夹概念中的完整路径。
  • 嗨 Greg,我在本地使用 mkdir 时看到了与 riofs 相同的行为,但我还看到当 S3 存储桶上存在前缀对象时,riofs 将创建一个本地目录反映这一点。在围绕这些“坐骑”进行自动化处理时,这可能很有用。

标签: amazon-web-services amazon-s3 aws-cli


【解决方案1】:

在复制/移动之前保存文件夹名称并将 /DirName 添加为目标

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


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

【讨论】:

    【解决方案2】:

    S3 中确实没有目录。但是,正如您所指出的,有前缀和分隔符,默认分隔符是 /,这使您可以对 S3 存储桶中的分层目录结构进行非常令人信服的模拟。

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

    在控制台中提出创建文件夹想法的人应该为自己感到羞耻。这会引起很多混乱。

    【讨论】:

    • 技术上确实如此,但大多数客户可能不太关心底层存储机制是什么,它不是文件系统。 s3 一种URI方案,它们最初是作为分层子目录的抽象而创建的。谁在乎这些不是真正的文件夹/目录。它们看起来像文件夹,它们闻起来像文件夹。期望客户在解释他们不是文件夹时不会睡着,这只是迂腐。
    【解决方案3】:

    经过一些快速的摆弄后,我发现这似乎可行:

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

    但只有在 --key 的参数末尾包含“/”时它才有效。那部分只是感觉不对……肯定有更好的方法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 2022-01-25
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多