너무 많은 답변이 있기 때문에 나는 내 자신과 의견을 같이하는 것을 알았습니다. LINQPad를 사용하여 C #으로 구현을 작성했습니다. 쿼리하려는 액세스 키, 비밀 키, 리전 엔드 포인트 및 버킷 이름을 복사, 붙여 넣기 및 입력합니다. 또한 AWSSDK 너겟 패키지를 추가하십시오.
내 버킷 중 하나에 대해 테스트 한 결과 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]);
}
}