4

私はAmazon s3バケットに取り組んでいます。そして、コードを使用してバケット内のフォルダーのサイズを見つける必要があります。フォルダーのサイズを直接見つける方法が見つかりません。この機能を達成する他の方法はありますか?

編集: s3バケットにはフォルダーと呼ばれるものがないことを認識しています。しかし、フォルダーフォルダー構造のように見えるすべてのファイルのサイズを見つける必要があります。つまり、構造がこのようなものである場合、構造をhttps://s3.amazonaws.com/****/uploads/storeeoll48jipuvjbqufcap3p6on6er2bwsufv5ojzqnbe01xvw0fy58x65.png持つすべてのファイルのサイズを見つける必要があります。https://s3.amazonaws.com/****/uploads/...

4

6 に答える 6

5

Python で boto を使用する場合は、次の小さなスクリプトを試してみてください。

import boto
conn=boto.connect_s3('api_key','api_secret')
bucket=conn.get_bucket('bucketname');
keys=bucket.list('path')
size=0
for key in keys:
        size+= key.size
print size
于 2012-05-21T13:23:45.470 に答える
5

AwsConsoleApp.java AWS SDK サンプルから:

List<Bucket> buckets = s3.listBuckets();
long totalSize  = 0;
int  totalItems = 0;
for (Bucket bucket : buckets)
{
    ObjectListing objects = s3.listObjects(bucket.getName());
    do {
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
            totalSize += objectSummary.getSize();
            totalItems++;
        }
        objects = s3.listNextBatchOfObjects(objects);
    } while (objects.isTruncated());
    System.out.println("You have " + buckets.size() + " Amazon S3 bucket(s), " +
                    "containing " + totalItems + " objects with a total size of " + totalSize + " bytes.");
}
于 2012-05-21T13:09:01.063 に答える
0

boto3でそれを行う方法は次のとおりです。

import boto3

bucketName = '<bucketname>'
client = boto3.client('s3')

def get_all_objects_in_prefix(prefix):
    lastkey = ''
    while True:
        response = client.list_objects(
            Bucket=bucketName,
            Prefix=prefix,
            Marker=lastkey,
            MaxKeys=1000
        )
        if not response.get('Contents'):
            break
        lastkey = [item['Key'] for item in response['Contents']][-1]
        for item in response['Contents']:
            yield item

def get_filesize_of_prefix(prefix):
    size = 0
    for item in get_all_objects_in_prefix(prefix):
        size += item['Size']

    return size
于 2016-11-18T23:47:46.733 に答える
0

S3 には「フォルダ」と呼ばれるものはなく、フラットなファイル システムです。ファイル名 (バケット キー) にはスラッシュ (/) が含まれる場合があり、さまざまなバケット エクスプローラーはこれを使用してフォルダー ファイル構造を解釈できます。

S3 の「フォルダー」のサイズを知るには、まずその「フォルダー」パスの部分文字列を含むすべての個々のファイルのキーを知る必要があります。バケットに何百万ものファイルが含まれている場合、これは非常にコストのかかる操作になります。

一部の S3 エクスプローラーは、これを自動的に行います。S3 には Cloudberry エクスプローラーを使用しています。

于 2012-05-21T13:05:26.943 に答える
0

フォルダーは S3 には実際には存在しません。

のキーを持つオブジェクトはsubfolder/myfile.txt、ソフトウェアによってsubfolderフォルダ内にあるものとして表示されます。しかし、それは単なる表示であり、フォルダは実際には存在しません。プログラムでその「フォルダー」にあるアイテムの数を調べたい場合は、サブフォルダーで始まるすべてのオブジェクトをループし、サイズを取得して合計します。あるいは、右クリックでサイズを表示するS3Browserをチェックしてください。

于 2012-05-21T13:05:58.650 に答える