Подтвердить что ты не робот

Как перечислить все файлы в папке s3 с использованием жемчуга AWS-SDK в рубине на рельсах

Мне хотелось показать список всех файлов в папке 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
4b9b3361

Ответ 1

Слишком поздно ответить, но лучше, чем никогда.

Вы можете сделать

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

Согласно официальной документации здесь

Ответ 2

Вы можете использовать этот небольшой фрагмент кода для получения списка файлов для определенной папки.

 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)

Ответ 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') 

Если доступно лучшее решение, я дам вам знать.