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

ruby – 在Amazon S3中列出给定级别的目录,第1张

概述我在亚马逊S3桶中存储了200万个文件.下面有一个给定的根(l1),l1下的目录列表,然后每个目录包含文件.所以我的桶看起来像下面这样 l1/a1/file1-1.jpgl1/a1/file1-2.jpgl1/a1/... another 500 filesl1/a2/file2-1.jpgl1/a2/file2-2.jpgl1/a2/... another 500 files.... 我在亚马逊S3桶中存储了200万个文件.下面有一个给定的根(l1),l1下的目录列表,然后每个目录包含文件.所以我的桶看起来像下面这样

l1/a1/file1-1.jpgl1/a1/file1-2.jpgl1/a1/... another 500 filesl1/a2/file2-1.jpgl1/a2/file2-2.jpgl1/a2/... another 500 files....l1/a5000/file5000-1.jpg

我想尽快列出二级条目,所以我想得到a1,a2,a5000.我不想列出所有的密钥,这将花费更长的时间.

我愿意直接使用AWS API,但是到目前为止我已经使用ruby http://rdoc.info/projects/rightscale/right_aws中的right_aws gem玩了

该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  endend

这将common_prefixes方法添加到RightAws :: S3 :: Bucket类.现在,您可以使用mybucket.common_prefixes来获取一系列公共前缀,而不是调用mybucket.keys来获取存储桶中的密钥列表.在你的情况下:

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

我必须说我只用少量公共前缀测试它;你应该检查这是否适用于超过1000个公共前缀.

总结

以上是内存溢出为你收集整理的ruby – 在Amazon S3中列出给定级别的目录全部内容,希望文章能够帮你解决ruby – 在Amazon S3中列出给定级别的目录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1288131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存