非常に多くの答えがあるので、私は自分自身で投球すると思いました。LINQPadを使用してC#で実装を作成しました。クエリするアクセスキー、シークレットキー、リージョンエンドポイント、バケット名をコピー、貼り付け、入力します。また、AWSSDK nugetパッケージを必ず追加してください。
バケットの1つに対してテストすると、カウントは128075、サイズは70.6GBでした。これは99.9999%の精度であることがわかっているので、結果に満足しています。
void Main() {
var s3Client = new AmazonS3Client("accessKey", "secretKey", RegionEndpoint.???);
var stop = false;
var objectsCount = 0;
var objectsSize = 0L;
var nextMarker = string.Empty;
while (!stop) {
var response = s3Client.ListObjects(new ListObjectsRequest {
BucketName = "",
Marker = nextMarker
});
objectsCount += response.S3Objects.Count;
objectsSize += response.S3Objects.Sum(
o =>
o.Size);
nextMarker = response.NextMarker;
stop = response.S3Objects.Count < 1000;
}
new {
Count = objectsCount,
Size = objectsSize.BytesToString()
}.Dump();
}
static class Int64Extensions {
public static string BytesToString(
this long byteCount) {
if (byteCount == 0) {
return "0B";
}
var suffix = new string[] { "B", "KB", "MB", "GB", "TB", "PB", "EB" };
var longBytes = Math.Abs(byteCount);
var place = Convert.ToInt32(Math.Floor(Math.Log(longBytes, 1024)));
var number = Math.Round(longBytes / Math.Pow(1024, place), 1);
return string.Format("{0}{1}", Math.Sign(byteCount) * number, suffix[place]);
}
}