【问题标题】:AWS S3 copy folder without using listobject不使用 listobject 的 AWS S3 复制文件夹
【发布时间】:2021-11-27 17:50:39
【问题描述】:

我需要在同一个存储桶中复制一个文件夹,然后对复制的内容运行各种逻辑。 我想知道是否有办法在不使用listObjects 的情况下复制整个文件夹,然后分别复制每个文件。

因为这意味着运行listObjects 并复制每个文件,然后在新文件夹上再次运行listObjects,然后在每个文件上运行逻辑。

所以基本上我是在尝试节省 IO 并避免多个循环。

请指教。

【问题讨论】:

  • 了解 Bucket 内容的唯一方法是使用ListObjectsAmazon S3 Inventory,它们可以提供列出所有对象的每日或每周 CSV 文件。每个对象都需要单独复制。
  • 请发表您的评论作为答案,以便我接受。

标签: node.js amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

您可以在您选择的 SDK 中使用 --recursive 标记来完成此操作。将此与可以使用通配符的--include--exclude 标志结合使用,您就可以实现您的目标。 See this page of the CLI documentation

类似:

aws s3 cp s3://mybucket/logs/ s3://mybucket/logs2/ --recursive --exclude "*" --include "*.log"

【讨论】:

    【解决方案2】:

    Amazon S3 不提供“复制文件夹”的命令。相反,每个对象都必须通过其自己的 API 请求单独复制

    这意味着您首先需要获取对象列表。这可以通过以下方式获得:

    • ListObjects 的调用(注意:每个 API 调用最多只能返回 1000 个对象)

    • 使用 Amazon S3 Inventory 生成 CSV 格式的现有对象列表,然后使用该列表生成复制请求

    如果您有大量个对象,您可以考虑使用Amazon S3 Batch Operations,它可以为每个对象复制文件或调用AWS Lambda函数。

    您还可以将 Amazon S3 配置为在创建对象时(包括复制对象时)触发 AWS Lambda 函数。这样,对象的创建就可以直接触发你要运行的逻辑。

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多