Desde que há tantas respostas, eu imaginei que eu colocaria com o meu próprio. Eu escrevi minha implementação em C # usando o LINQPad. Copie, cole e insira a chave de acesso, a chave secreta, o ponto de extremidade da região e o nome do bloco que você deseja consultar. Além disso, certifique-se de adicionar o pacote nuget AWSSDK.
Teste contra um dos meus buckets, isso me deu uma contagem de 128075 e um tamanho de 70,6 GB. Eu sei que é 99,9999% exato, então eu estou bem com o resultado.
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]);
}
}