1

在 AWS-SDK 中,它列出了以下形式的 ruby​​ 代码:

 s3 = AWS::S3.new
 bucket = s3.buckets[bucket_name]
 tree = bucket.as_tree(:prefix => 'myshop/products')
 directories = tree.children.select(&:branch?).collect(&:prefix)

失败错误:“无法在 S3 列表对象响应中找到标记”

目录结构

/myshop/products/1474472/original.jpg
/myshop/products/1474472/small.jpg
/myshop/products/1474472/mini.jpg
/myshop/products/1333333/original.jpg
/myshop/products/1333333/small.jpg
/myshop/products/1333333/mini.jpg

...

超过 100 000 个 obj

我想验证目录(例如“1474472”)是否已创建

我的计划:aws-s3-list-> ruby​​-array-> 在数组中查找 (array.include?)

!!!需要非常快速的方法 - 很快世界末日:)

4

3 回答 3

0

Amazon S3 中没有文件夹之类的东西。它是一个“平面”文件系统。看看这个答案

您真正需要的是验证您的存储桶中是否存在给定的前缀(例如“/myshop/products/1474472”)。
他们的 REST API 绝对支持它,请查看文档。您需要列出与给定匹配的键(这将是“文件名”)prefix,可以作为参数传递。您还可以通过将max-keys参数设置为 来优化您的调用1。这样,如果您在响应中收到任何非零数量的项目,则存储桶已包含名称以给定前缀开头的文件。

于 2012-11-23T12:35:07.303 回答
0

理想的方法是在写入 S3 时通过您的应用程序维护列表。EMRFS 通过将详细信息存储在 Dynamo DB 上来做同样的事情。

使用该列表生成清单,例如用于 S3Distcp。这样我们就可以避免将 S3 打到 list,这是一个代价高昂的操作。

于 2018-08-20T19:02:03.467 回答
0
aws s3 cp s3://bucket/tmp/foo/ . --recursive --exclude "*" --include "*1474472" 

https://docs.aws.amazon.com/cli/latest/reference/s3/index.html#use-of-exclude-and-include-filters

于 2018-05-02T17:48:30.733 回答