【问题标题】:AWS S3 query list one Partition fileAWS S3 查询列出一个分区文件
【发布时间】:2022-02-07 14:49:38
【问题描述】:

如何列出 S3 存储桶中跨域的所有文件是否有 CLI 或 shell 脚本中的任何查询以递归地返回存储桶中每个源下的数据集技术名称。

例如:

My bucket/domains/files 

【问题讨论】:

  • 抱歉,您的问题不清楚。你能提供一个你想要的例子吗?例如,您能否向我们展示一个包含文件的示例目录结构,然后向我们展示您希望从中获得什么?
  • 在 S3 存储桶中,我有多个来源,每个来源内部都有文件的数据集技术名称。我想递归列出存储桶中每个来源下的所有数据集技术名称。例如 S3 存储桶/源名称/数据集技术名称
  • 对不起,我还是不明白——你说的“起源”是什么意思?这不是适用于 Amazon S3 存储桶的正常术语。您指的是子目录吗?什么是“数据集技术名称”?你指的是对象的文件名吗?
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python-3.x amazon-web-services amazon-s3 boto3 amazon-athena


【解决方案1】:

您可以调用list_objects_v2(),它将返回一个对象列表。如果对象超过 1000 个,您可以使用 paginator 轻松循环遍历每个对象。

API 调用将为每个对象返回一个Key,其中包含对象的完整路径(例如folder1/object.txt)。

Amazon S3 不使用“文件夹”或“子目录”,因此列表将包含所有对象。这很方便,因为可以很容易地获得完整的列表,而不需要遍历每个子目录。

如果您确实需要遍历目录,您可以使用list_objects_v2(Delimiter='/',Prefix='folder1/'),它只会返回带有该前缀的对象列表,这实际上与目录相同。它还将返回CommonPrefixes 的列表,这些列表实际上是该前缀下的目录名称。但是,以这种方式在存储桶中进行递归将需要多次 API 调用,而且速度会相当慢。

【讨论】:

    猜你喜欢
    • 2019-07-03
    • 2019-10-11
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多