gpt4 book ai didi

ruby - 列出 Amazon S3 中给定级别的目录

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:38 26 4
gpt4 key购买 nike

我在亚马逊 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。我不想列出所有 key ,这会花费更长的时间。

我愿意直接使用 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 实现吗?

谢谢!

最佳答案

right_aws 允许将其作为其底层 S3Interface 类的一部分来执行此操作,但您可以创建自己的方法以更轻松(更好)地使用。把它放在代码的顶部:

module RightAws
class S3
class Bucket
def common_prefixes(prefix, delimiter = '/')
common_prefixes = []
@s3.interface.incrementally_list_bucket(@name, { 'prefix' => prefix, 'delimiter' => delimiter }) do |thislist|
common_prefixes += thislist[:common_prefixes]
end
common_prefixes
end
end
end
end

这会将 common_prefixes 方法添加到 RightAws::S3::Bucket 类。现在,您可以使用 mybucket.common_prefixes 来获取公共(public)前缀数组,而不是调用 mybucket.keys 来获取存储桶中的键列表。在你的情况下:

mybucket.common_prefixes("l1/")
# => ["l1/a1", "l1/a2", ... "l1/a5000"]

我必须说我只用少量的常见前缀测试过它;您应该检查这是否适用于 1000 多个常见前缀。

关于ruby - 列出 Amazon S3 中给定级别的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1239700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com