【问题标题】:How do I update the meta-data of a directory using aws s3 cli?如何使用 aws s3 cli 更新目录的元数据?
【发布时间】:2021-03-13 17:14:46
【问题描述】:

我正在尝试在 bash 脚本中使用以下命令以递归方式更新文件和文件夹的 x-amz-meta-uid 和 x-amz-meta-gid。

aws s3 cp s3://$SOURCE_CLOUD_BUCKET_PATH s3://$DESTINATION_CLOUD_BUCKET_PATH --recursive --quiet --metadata-directive "REPLACE" --metadata "uid=$USER_UID,gid=$USER_GID"

但是,它似乎只是在更新文件的元数据。我怎样才能让这个也更新目录/文件夹上的元数据?

aws --version

aws-cli/2.0.43 Python/3.7.3 Linux/5.4.0-1029-aws exe/x86_64.ubuntu.18

【问题讨论】:

  • 为什么你想在文件夹上设置元数据?在 Amazon S3 中,您无需在给定路径中存储对象时创建文件夹。文件夹神奇地出现了。可以使用“创建文件夹”,它将创建一个与文件夹同名的零长度对象。当您使用 s3fs 之类的工具时,它们可能会针对这个零长度对象存储信息,但它不会影响文件夹的内容。因此,您可能想重新访问为什么要在文件夹本身上设置元数据(实际上并不存在)。
  • 感谢您抽出宝贵时间@John Rotenstein。我正在使用 S3 为许多 Wordpress 网站卸载上传媒体。我正在使用 s3fs 将 s3 存储桶挂载为本地文件系统,这使我可以简单地将上传文件夹符号链接到挂载的 s3。它工作得很好,我对当前的设置没有任何问题。我可以使用 chown 很好地设置挂载的 s3 的文件和文件夹的权限,但是,这显然非常慢,因为 s3 不是真正的文件系统。我只是希望有一种更有效的方法来使用 aws cli 设置这些权限。

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


【解决方案1】:

正如 AWS S3 文档所述:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html

在 Amazon S3 中,存储桶和对象是主要资源,而 对象存储在桶中。 Amazon S3 具有扁平结构 类似于您在文件系统中看到的层次结构。然而,对于 为了组织简单,Amazon S3 控制台支持 文件夹概念作为对对象进行分组的一种方式。 Amazon S3 通过 使用对象的共享名称前缀(即,对象具有名称 以公共字符串开头)。对象名称也称为 键名。

因为 AWS S3 是对象存储服务,不符合 POSIX。

这意味着没有磁盘级文件夹结构维护者。

您看到的文件夹是合乎逻辑的,这意味着名称为 hello/world.text 的文件将显示 hello 作为父文件夹名称,而 world.txt 作为文件名,但实际存储的文件名是 hello/world.txt。

因此元数据也在文件级别而不是文件夹级别进行管理,因为它们不是物理文件夹。

CLI 行为正确,您需要修改文件的元数据。不过,您可以一次修改所有文件/多个文件的元数据。

【讨论】:

  • 谢谢阿图尔。我可以使用 s3 浏览器之类的工具或在 s3fs 安装的驱动器上使用 chown 更改文件夹上的元数据,因此元数据似乎也存储在目录级别。就我所能找到的而言,似乎没有办法通过 cli 来管理它。
  • 当您使用这些工具时,它们只是修改文件组的元数据,即该文件夹中的所有文件。由于 S3 使用由/分隔的逻辑分组文件名
猜你喜欢
  • 1970-01-01
  • 2019-10-30
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2021-02-21
  • 2020-03-20
  • 2019-05-12
相关资源
最近更新 更多