Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby S3:如何在多个目录中按名称搜索/查找文件?_Ruby_Amazon S3 - Fatal编程技术网

Ruby S3:如何在多个目录中按名称搜索/查找文件?

Ruby S3:如何在多个目录中按名称搜索/查找文件?,ruby,amazon-s3,Ruby,Amazon S3,我在s3上有一个存储桶,里面有很多图像(几十万)。每个图像都有一个非常唯一的文件名(一个长的散列名称),并存储在根据数据库中相应的对象id命名的子目录中 一个简化的例子: /bucket/1/red-1.jpg /bucket/1/red-2.jpg /bucket/1/red-3.jpg /bucket/2/blue-1.jpg /bucket/2/blue-2.jpg /bucket/2/blue-3.jpg 现在的问题是,数据库中的id已经更改,而子目录的名称却没有更改。这意味着,根据我

我在s3上有一个存储桶,里面有很多图像(几十万)。每个图像都有一个非常唯一的文件名(一个长的散列名称),并存储在根据数据库中相应的对象id命名的子目录中

一个简化的例子:

/bucket/1/red-1.jpg
/bucket/1/red-2.jpg
/bucket/1/red-3.jpg
/bucket/2/blue-1.jpg
/bucket/2/blue-2.jpg
/bucket/2/blue-3.jpg
现在的问题是,数据库中的id已经更改,而子目录的名称却没有更改。这意味着,根据我的数据库,图像
red-1.jpg
应该位于
/bucket/2
中,但实际上它仍然位于
/bucket/1
中。因此,我需要能够在所有子目录中搜索,找到名为
red-1.jpg
,并将其移动到正确的目录(在本例中为
/bucket/2

注意:关于移动文件的部分应该非常简单,最大的问题是如何有效地搜索和找到这些图像的路径,在那里我知道名称,但不知道当前目录

我喜欢ruby,但我很乐意使用任何东西


顺便说一句,我看到了一些关于亚马逊云搜索的内容,但我不知道这是否可以用于此..

没有简单的方法只列出带有特定后缀的键


您应该使用该方法遍历所有常用前缀(文件夹),以找到与您要查找的文件名对应的对象。

正如提示:S3中没有“文件夹”这样的东西。您所调用的文件夹只不过是文件名的前缀。请看:好的,很好,但这如何解决我的问题呢?我会尝试使用GET Bucket(List Objects)API调用()来处理arround。如果需要,您可以指定前缀,但我认为您的情况不会是这样。