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
この小さなコードを使用して、特定のフォルダーのファイルのリストを取得できます。
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)
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", })
現在、私もこの問題に悩まされています。これまでの解決策は、すべてのオブジェクトを取得し、後でフィルタリングすることです。
data = bucket.objects(bucketname, prefix: 'Folder1')
data_without_folders = data.select { |obj| !(obj.key =~ /\/$/) }
区切り文字については、次のようにbucket.objects呼び出しで渡す必要があります。
data = bucket.objects(bucketname, prefix: 'prefix', delimiter: 'delimiter')
より良い解決策が利用可能であれば、お知らせします。