

S3でフォルダの数だけ取得する事ってできますか？

例えば、

[code]

    jazz/chill/chord_01/xxx.wav
    jazz/chill/chord_01/xxx.wav
    jazz/chill/chord_01/xxx.wav
    jazz/chill/chord_02/xxx.wav
    jazz/chill/chord_03/xxx.wav
    
[/code]

という構成の時に、

[code]

    [jazz/chill/chord_01/, jazz/chill/chord_02, jazz/chill/chord_03/].count 
    => 3
    
[/code]

```

のように、フォルダ数だけ取得したいです。

ファイル数情報は、下記のようなコードで取得できましたが、  
フォルダ情報だけの取得方法がわかりません。

[code]

    def get_files(file_path='')
      resp = @s3.list_objects({
        bucket: Settings.aws.bucket_name,
        prefix: file_path
      })
      resp.to_h[:contents]
    end
    
[/code]

お助けいただけると幸いです、よろしくお願いします。


CC BY-SA 4.0
2018-07-30T10:52:03.963
47103
2018-08-06T09:37:53.577
2018-08-06T08:25:11.537
76
29021
question
ruby-on-rails ruby aws amazon-s3
S3のフォルダの数を取得したい


S3にはフォルダという概念はありませんので、得られたキーをファイル名とみなして `dirname`
などでフォルダとして扱いたい部分を取り出し、ユニークな名前を数えることになります。


CC BY-SA 4.0
2018-07-31T03:33:27.380
47116
2018-07-31T03:33:27.380
17037
47103
answer


ruby 自体のコードは、ぱっとはでてこないので、方針を。

<https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/ListingKeysHierarchy.html>

上記ページなどを参照すると、 aws s3 の api には、区切り文字と prefix を指定して list object すると、prefix
の次1階層分のデータを取得できそうなのが、読み取れます。

おそらく、今回ですと、 aws-sdk-s3 を利用して、以下の条件で list_objects するのが、いいのではないか、と思っています。(未検証)

[code]

    @s3.list_objects({
        bucket: Settings.aws.bucket_name,
        prefix: 'jazz/chill/',
        delimiter: '/'
      })
    
[/code]


CC BY-SA 4.0
2018-08-06T05:11:59.990
47276
2018-08-06T09:37:53.577
2018-08-06T09:37:53.577
754
754
47103
answer