【发布时间】:2010-11-17 09:41:18
【问题描述】:
我在亚马逊 S3 存储桶中存储了 200 万个文件。下面有一个给定的根 (l1),l1 下的目录列表,然后每个目录都包含文件。所以我的存储桶将如下所示
l1/a1/file1-1.jpg
l1/a1/file1-2.jpg
l1/a1/... another 500 files
l1/a2/file2-1.jpg
l1/a2/file2-2.jpg
l1/a2/... another 500 files
....
l1/a5000/file5000-1.jpg
我想尽快列出二级条目,所以我想得到a1、a2、a5000。我不想列出所有的键,这需要更长的时间。
我对直接使用 AWS api 持开放态度,但是到目前为止我已经使用 ruby 中的 right_aws gem http://rdoc.info/projects/rightscale/right_aws
该 gem 中至少有两个 API,我尝试在 S3 模块中使用 bucket.keys() 并在 S3Interface 模块中使用 incrementally_list_bucket()。例如,我可以设置前缀和分隔符来列出所有 l1/a1/*,但我不知道如何仅列出 l1 中的第一级。在incrementally_list_bucket() 返回的哈希中有一个 :common_prefixes 条目,但在我的测试示例中它没有填写。
是否可以使用 S3 API 进行此操作?
谢谢!
【问题讨论】:
-
查看 ListBucket 操作的 S3 文档:docs.amazonwebservices.com/AmazonS3/2006-03-01/…。要获得 a1-a5000,请指定前缀="/l1/" 分隔符="/"。要获取 /l1/a123/*,请指定前缀="/l1/a123/"、分隔符="/"。这就是你的想法吗?
-
Oren,你说得对,它现在正在工作。非常感谢。也许我创建的测试桶结构是错误的。