46

我想显示 s3 文件夹中所有文件的列表,以便我可以获取所有最后修改的日期,以便确定哪些文件已更改。

我尝试使用 objects.with_prefix('Folder1') 它给了我一个完整的列表,但也包含 Folder1.1 键

我不知道我是否需要使用分隔符,但我找不到任何如何在 aws sdk 中使用分隔符。

提前非常感谢!

我正在使用“aws-sdk”gem

这是我的存储桶结构 -Folder1 -File1 -File2 -Folder.1.1

这是我的代码

bucket = s3.buckets[bucket_name]
data = bucket.objects.with_prefix('Folder1/')
data.each do |object|
    puts "#{object.key}\t#{object.last_modified}";
end
4

5 回答 5

42

答案为时已晚,但总比没有好。

你可以做

s3_bucket.objects.with_prefix('folder_name').collect(&:key)

根据官方文档here

更新: SDK V3

s3 = Aws::S3::Client.new
resp = client.list_objects_v2({
  bucket: "BucketName", # required
  prefix: "FolderName", 
})
于 2014-06-11T11:50:56.077 回答
14

您可以使用这段小代码来获取特定文件夹的文件列表。

 s3 = Aws::S3::Resource.new(region: 'ap-southeast-1', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] )
 data_files = s3.bucket(bucket_name).objects(prefix: 'prefix/', delimiter: 'delimiter').collect(&:key)
于 2016-03-29T10:37:01.090 回答
8

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#list_objects_v2-instance_method

SDK V3 有客户端前缀选项!

resp = client.list_objects_v2({ bucket: "BucketName", # required prefix: "FolderName", })

于 2018-02-15T22:09:28.783 回答
3

目前我也遇到了这个问题。到目前为止的解决方案是获取所有对象并稍后过滤它们:

data = bucket.objects(bucketname, prefix: 'Folder1')

data_without_folders = data.select { |obj| !(obj.key =~ /\/$/) }

对于分隔符,您只需在 bucket.objects 调用中传递它,如下所示:

data = bucket.objects(bucketname, prefix: 'prefix', delimiter: 'delimiter') 

如果有更好的解决方案,我会告诉你。

于 2013-11-20T13:59:09.123 回答
1

让我们记住,S3 不是文件系统,所以即使“文件夹/”也是一个对象。

现在,如果您想获取特定路径的文件,可以使用start_after。例如,如果您的 S3 存储桶中有一个这样的对象列表。

pictures/
pictures/horse.jpg
pictures/dog.jpg
pictures/cat.jpg
lion.jpg

您可以通过执行以下操作从图片/路径中获取所有图片:

 s3 = Aws::S3::Resource.new(region: 'ap-southeast-1', access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] )
 pictures = s3.bucket(bucket_name).objects(prefix: 'pictures/', delimiter: '', start_after: 'pictures/').collect(&:key)

输出将只是没有文件夹/的所有图片键:

  • 图片/马.jpg
  • 图片/狗.jpg
  • 图片/cat.jpg
于 2020-07-21T14:33:13.700 回答