ฉันจะได้ขนาดถังของ Amazon S3 ได้อย่างไร


289

ฉันต้องการวาดกราฟขนาด (เป็นไบต์และจำนวนรายการ) ของที่เก็บ Amazon S3 และกำลังมองหาวิธีที่มีประสิทธิภาพในการรับข้อมูล

s3cmdเครื่องมือให้วิธีการที่จะได้รับขนาดไฟล์ทั้งหมดใช้s3cmd du s3://bucket_nameแต่ฉันกังวลเกี่ยวกับความสามารถในการปรับขนาดตั้งแต่ดูเหมือนว่ามันจะเรียกข้อมูลเกี่ยวกับไฟล์ทุกไฟล์และคำนวณผลรวมของตัวเอง เนื่องจาก Amazon เรียกเก็บเงินจากผู้ใช้ในหน่วย GB- เดือนดูเหมือนว่าแปลกที่พวกเขาไม่ได้เปิดเผยค่านี้โดยตรง

แม้ว่าREST API ของ Amazonจะคืนค่าจำนวนรายการในที่เก็บข้อมูลแต่ดูเหมือนว่าs3cmdจะไม่เปิดเผย ฉันทำได้s3cmd ls -r s3://bucket_name | wc -lแต่ดูเหมือนว่าจะเป็นแฮ็ค

ไลบรารีRuby AWS :: S3ดูมีแนวโน้ม แต่ให้รายการ # ของที่ฝากข้อมูลไม่ใช่ขนาดที่เก็บทั้งหมด

มีใครรู้บ้างเกี่ยวกับเครื่องมือบรรทัดคำสั่งหรือไลบรารีอื่น ๆ (เช่น Perl, PHP, Python หรือ Ruby) ที่ให้วิธีการรับข้อมูลนี้หรือไม่?


ฉันเขียนเครื่องมือสำหรับการวิเคราะห์ขนาดถัง: github.com/EverythingMe/ncdu-s3
omribahumi

19
ฉันประหลาดใจที่ Amazon เรียกเก็บเงินจากพื้นที่ แต่ไม่ได้ให้ขนาดโดยรวมของถัง S3 เพียงแค่ผ่านแผง S3
ลุค

สำหรับฉันคำตอบส่วนใหญ่ด้านล่างใช้เวลาค่อนข้างนานในการเรียกขนาดที่เก็บข้อมูลอย่างไรก็ตามสคริปต์ไพ ธ อนนี้เร็วกว่าคำตอบส่วนใหญ่ - slsmk.com/getting-the-size-of-an-s3-bucket-using -boto3-for-aws
Vaulstein

คำตอบ:


168

AWS CLI ในขณะนี้สนับสนุน--queryพารามิเตอร์ที่ใช้นิพจน์JMESPath

ซึ่งหมายความว่าคุณสามารถรวมค่าขนาดที่ได้รับจากlist-objectsการใช้และนับเช่นsum(Contents[].Size)length(Contents[])

สามารถดำเนินการได้โดยใช้ AWS CLI อย่างเป็นทางการดังต่อไปนี้และเปิดตัวในเดือนกุมภาพันธ์ 2014

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

21
สำหรับที่เก็บขนาดใหญ่ (#files ที่มีขนาดใหญ่) การทำแบบนี้จะทำให้เลือดไหลช้า ยูทิลิตี้ของ Python s4cmd "du" นั้นเร็วมาก:s4cmd du s3://bucket-name
Brent Faust

มันแปลกมาก รายละเอียดโดยรวมของถังของคุณคืออะไร (ตื้นและอ้วน / ลึกและผอม)? ดูเหมือนว่าควรจะมีค่าใช้จ่ายเช่นเดียวกับs3cmd AWS CLIในรหัสมันแสดง s3cmdให้ทำการร้องขอสำหรับแต่ละไดเรกทอรีในที่ฝากข้อมูล
Christopher Hackett

22
เพื่อให้อยู่ในรูปแบบที่มนุษย์อ่านได้: aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}'
Sandeep

21
เมื่อ AWS Cloudwatch เสนอ "BucketSizeBytes" ต่อการฝากข้อมูลตัวชี้วัดแล้วนี่ไม่ใช่โซลูชันที่เหมาะสมอีกต่อไป ดูคำตอบของ Toukakoukan ด้านล่าง
cce

2
s4cmd duเป็นสิ่งที่ยอดเยี่ยมขอบคุณ @Brent Faust! บันทึกย่อขนาดเล็ก (สำหรับผู้ที่เกี่ยวข้อง) ที่คุณต้องเพิ่ม-rเพื่อให้ได้ขนาดของไดเรกทอรีย่อยเช่นกัน
เกร็ก Sadetsky

330

สิ่งนี้สามารถทำได้เพียงเล็กน้อยด้วยไคลเอนต์บรรทัดคำสั่ง AWS อย่างเป็นทางการ:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/

เอกสารอย่างเป็นทางการ

นอกจากนี้ยังยอมรับคำนำหน้าเส้นทางหากคุณไม่ต้องการนับที่เก็บข้อมูลทั้งหมด:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory

23
นี่คือคำตอบที่ดีที่สุดและทันสมัย
ทิม

2
เห็นด้วยนี่เป็นคำตอบที่ดีที่สุด
Luis Artola

24
นี่เป็นเรื่องช้ามากสำหรับที่เก็บถังที่มีไฟล์จำนวนมากเนื่องจากโดยทั่วไปแล้วจะแสดงรายการวัตถุทั้งหมดในที่เก็บข้อมูลก่อนที่จะแสดงสรุปและในการที่มันไม่เร็วกว่าคำตอบ @Christopher Hackett อย่างมีนัยสำคัญ - ยกเว้นอันนี้มีเสียงดังมากกว่า
Guss

ใช้งานอินสแตนซ์ EC2 ที่มีพื้นที่ฝากข้อมูลเดียวกันเพื่อปรับปรุงเวลาในการตอบสนอง
juanmirocks

1
นี่จะแสดงขนาดของไฟล์ทั้งหมดในแผนผังไดเร็กทอรี ถ้าฉันต้องการขนาดทั้งหมดสำหรับไดเรกทอรี
Chris F

130

คอนโซล AWS:

28 กรกฎาคม 2015คุณสามารถได้รับข้อมูลนี้ผ่าน CloudWatch หากคุณต้องการ GUI ให้ไปที่คอนโซล CloudWatch : (เลือกภูมิภาค>) ตัวชี้วัด> S3

คำสั่ง AWS CLI:

นี่เร็วกว่าคำสั่งอื่น ๆ ที่โพสต์ที่นี่เนื่องจากไม่เคียวรีขนาดของแต่ละไฟล์เพื่อคำนวณผลรวม

 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage

สำคัญ : คุณต้องระบุทั้ง StorageType และ BucketName ในอาร์กิวเมนต์ขนาดมิฉะนั้นคุณจะไม่ได้รับผลลัพธ์ ทั้งหมดที่คุณจำเป็นต้องเปลี่ยนเป็น--start-date, และ--end-timeValue=toukakoukan.com


นี่คือสคริปต์ทุบตีที่คุณสามารถใช้เพื่อหลีกเลี่ยงการระบุ--start-dateและ--end-timeด้วยตนเอง

#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage

25
หรือในคอนโซล CloudWatch : (เลือกภูมิภาค>) การวัด> S3
Halil Özgür

3
นี่คือทางออกที่ง่ายที่สุดและเร็วที่สุด น่าเสียดายที่คำตอบยังคงอยู่ในอันดับสี่เท่านั้น
luk2302

สิ่งนี้ใช้ได้กับถังของฉันที่มีวัตถุมากกว่า 10 ล้านรายการ แต่สคริปต์ทุบตีไม่ได้ส่งคืนอะไรเลยต้องไปที่ GUI)
Petah

1
ควรสังเกตว่าคุณจะต้องเปลี่ยนภูมิภาคด้วย
majikman

พฤษภาคม 2018: ข้อผิดพลาดของสคริปต์ด้วยInvalid value ('1525354418') for param timestamp:StartTime of type timestamp
anneb

106

s3cmdสามารถทำได้:

s3cmd du s3://bucket-name


ขอบคุณ นี่คือจังหวะ บนที่เก็บที่มีระบบไฟล์ที่ซ้ำซ้อน s3ql ซึ่งมีประมาณหนึ่งล้านไฟล์โดยใช้ข้อมูลที่ไม่ได้อัปโหลดประมาณ 33 GB และวัตถุ 93,000 s3 s3cmd du ใช้เวลาประมาณ 4 นาทีในการคำนวณคำตอบ ฉันอยากรู้ว่าวิธีเปรียบเทียบกับวิธีอื่นเช่น php ที่อธิบายไว้ที่นี่
nealmcb

1
ช้าเนื่องจากการเรียกS3 ListObjects APIจะส่งคืนวัตถุในหน้าวัตถุ 1,000 รายการ เนื่องจาก I / O นั้นเป็นปัจจัย จำกัด ฉันคิดว่าการแก้ปัญหาใด ๆ จะค่อนข้างช้ากว่าวัตถุ 93,000 รายการ
David Snabel-Caunt

11
s4cmdยังสามารถทำสิ่งเดียวกันได้โดยมีประโยชน์เพิ่มเติมจากการมัลติเธรดที่ร้องขอไปยัง S3 ของ API เพื่อคำนวณผลลัพธ์ได้เร็วขึ้น เครื่องมือยังไม่ได้รับการอัปเดตเมื่อเร็ว ๆ นี้ แต่ผู้ผ่านอินเทอร์เน็ตอาจพบว่ามีประโยชน์
Nick Chammas

s4cmd ส่งกลับค่า 0 สำหรับฉันเท่านั้นและส่งคืนBotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.สำหรับถังที่มีอักขระตัวพิมพ์ใหญ่
Lakitu

22

หากคุณดาวน์โหลดรายงานการใช้งานคุณสามารถสร้างกราฟค่ารายวันสำหรับTimedStorage-ByteHrsฟิลด์

หากคุณต้องการหมายเลขนั้นใน GiB เพียงแค่หารด้วย1024 * 1024 * 1024 * 24(นั่นคือ GiB- ชั่วโมงสำหรับรอบ 24 ชั่วโมง) หากคุณต้องการตัวเลขเป็นไบต์ให้หารด้วย 24 แล้ววาดกราฟ


19

การใช้เครื่องมือบรรทัดคำสั่ง AWS s3 อย่างเป็นทางการ:

aws s3 ls s3://bucket/folder --recursive | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

นี่เป็นคำสั่งที่ดีกว่าเพียงเพิ่มพารามิเตอร์ 3 ตัวต่อไปนี้--summarize --human-readable --recursiveหลังจากaws s3 lsนั้น --summarizeไม่จำเป็นต้องใช้แม้ว่าจะให้สัมผัสที่ดีกับขนาดโดยรวม

aws s3 ls s3://bucket/folder --summarize --human-readable --recursive

1
ระบุลิงก์ไปยังที่ที่อเมซอนระบุไว้โปรดระบุ ฉันหามันไม่เจอ
lobi


1
docs.aws.amazon.com/cli/latest/reference/s3/ls.htmlเป็นลิงค์ที่ดีกว่า
Ian Bamforth

4
คำตอบนี้ใช้ได้ดีที่สุดและเร็วที่สุดสำหรับฉัน
Miro

2
คำตอบที่ดีที่สุดและเร็วที่สุด!
PlagTag

11

s4cmd เป็นวิธีที่เร็วที่สุดที่ฉันพบ (ยูทิลิตีบรรทัดคำสั่งเขียนด้วย Python):

pip install s4cmd

ตอนนี้เพื่อคำนวณขนาดที่ฝากข้อมูลทั้งหมดโดยใช้หลายเธรด:

s4cmd du -r s3://bucket-name

6
ไม่s4cmd du s3://123123drinkจะไม่ส่งคืนขนาดของที่ฝากข้อมูล เพื่อให้ได้ขนาดถังคุณเพิ่ม recursive -rเช่นนี้: s4cmd du -r s3: // 123123drink
George Chalhoub

1
ใช่จุดที่ดี @BukLau (เพิ่ม-rในตัวอย่างด้านบนเพื่อหลีกเลี่ยงความสับสนเมื่อผู้คนใช้โฟลเดอร์จำลองใน S3)
Brent Faust

6

ฉันใช้S3 REST / Curl API ที่ระบุไว้ก่อนหน้าในหัวข้อนี้และทำสิ่งนี้:

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>


5

ดังนั้นการหมุนไปรอบ ๆ API และเล่นข้อความค้นหาเดียวกัน S3 จะสร้างเนื้อหาทั้งหมดของที่เก็บข้อมูลในหนึ่งคำขอและไม่จำเป็นต้องสืบทอดลงในไดเรกทอรี ผลลัพธ์จะต้องมีการสรุปรวมผ่านองค์ประกอบ XML ต่างๆและไม่เรียกซ้ำ ฉันไม่มีที่เก็บตัวอย่างที่มีหลายพันรายการดังนั้นฉันจึงไม่รู้ว่ามันจะปรับขนาดได้อย่างไร แต่ดูเหมือนง่ายพอสมควร


นี่ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุด จะอัปเดตโพสต์นี้ในอนาคตหากมีขนาดไม่ดีและฉันต้องทำอย่างอื่น ไลบรารีที่ให้การเข้าถึงผลลัพธ์ API แบบดิบได้ง่ายคือ PHP ตัวนี้: undesigned.org.za/2007/10/22/amazon-s3-php-class-
Garret Heaton

นั่นไม่ได้ จำกัด อยู่แค่ 1,000 รายการแรกเท่านั้นหรือ
Charlie Schliesser

4

... ช้าไปหน่อย แต่วิธีที่ดีที่สุดที่ฉันพบคือการใช้รายงานในพอร์ทัล AWS ฉันสร้างคลาส PHP เพื่อดาวน์โหลดและแยกวิเคราะห์รายงาน ด้วยคุณสามารถรับจำนวนวัตถุทั้งหมดสำหรับที่เก็บข้อมูลแต่ละชุดขนาดรวมเป็น GB หรือไบต์ต่อชั่วโมงและอีกมากมาย

ตรวจสอบและแจ้งให้เราทราบหากเป็นประโยชน์

AmazonTools


นี่เป็นทางออกที่น่าสนใจแม้ว่าจะแฮ็คไปเล็กน้อย กังวลว่ามันจะทำลายถ้า / เมื่อ Amazon เปลี่ยนไซต์ของพวกเขา แต่ฉันอาจต้องลองทำสิ่งนี้เมื่อฉันมีวัตถุมากพอที่วิธีอื่นจะช้าเกินไป ข้อดีอีกประการของวิธีนี้คือคุณจะไม่ถูกเรียกเก็บเงินสำหรับการโทร API
Garret Heaton

. . . เป็นข้อสันนิษฐาน แต่ถ้า Amazon เปลี่ยนรูปลักษณ์ของเว็บไซต์ฉันสงสัยว่าพวกเขาจะเปลี่ยนส่วนหลังมากซึ่งหมายความว่าแบบสอบถาม GET และ POST ปัจจุบันควรทำงาน ฉันจะรักษาชั้นเรียนในกรณีที่มันพังอยู่ดีเพราะฉันใช้บ่อย

3

ฉันแนะนำให้ใช้ S3 รายงานการใช้งานสำหรับที่เก็บข้อมูลขนาดใหญ่โปรดดูวิธีใช้งานวิธีใช้โดยทั่วไปคุณจำเป็นต้องดาวน์โหลดรายงานการใช้งานบริการ S3 สำหรับวันสุดท้ายด้วย Timed Storage - Byte Hrs และแยกวิเคราะห์เพื่อรับการใช้งานดิสก์

cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n

3

เอกสาร AWS จะบอกคุณถึงวิธีการ:

aws s3 ls s3://bucketnanme --recursive --human-readable --summarize

นี่คือผลลัพธ์ที่คุณได้รับ:

2016-05-17 00:28:14    0 Bytes folder/
2016-05-17 00:30:57    4.7 KiB folder/file.jpg
2016-05-17 00:31:00  108.9 KiB folder/file.png
2016-05-17 00:31:03   43.2 KiB folder/file.jpg
2016-05-17 00:31:08  158.6 KiB folder/file.jpg
2016-05-17 00:31:12   70.6 KiB folder/file.png
2016-05-17 00:43:50   64.1 KiB folder/folder/folder/folder/file.jpg

Total Objects: 7

   Total Size: 450.1 KiB

2

สำหรับวิธีการที่ใช้เทคโนโลยีต่ำจริงๆให้ใช้ไคลเอนต์ S3 ที่สามารถคำนวณขนาดของคุณได้ ฉันใช้การส่งข้อมูลของ Panic คลิกที่ถังข้อมูลทำ "รับข้อมูล" และคลิกปุ่ม "คำนวณ" ฉันไม่แน่ใจว่ามันเร็วหรือแม่นยำแค่ไหนเมื่อเทียบกับวิธีการอื่น แต่ดูเหมือนว่าจะคืนขนาดที่ฉันคาดไว้


2

เนื่องจากมีคำตอบมากมายฉันคิดว่าฉันจะเข้าร่วมกับตัวเอง ฉันเขียนการนำไปใช้ใน C # โดยใช้ LINQPad คัดลอกวางและป้อนรหัสการเข้าถึงคีย์ลับจุดสิ้นสุดภูมิภาคและชื่อถังที่คุณต้องการสอบถาม นอกจากนี้ตรวจสอบให้แน่ใจว่าได้เพิ่มแพ็กเกจเก็ต 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]);
    }
}

2

หากคุณต้องการรับขนาดจาก AWS Console:

  1. ไปที่ S3 แล้วคลิกที่ชื่อฝากข้อมูล
  2. เลือกแท็บ "การจัดการ"

ป้อนคำอธิบายรูปภาพที่นี่

  1. เลือกแท็บMetrics

โดยค่าเริ่มต้นคุณจะเห็นหน่วยเก็บข้อมูลของที่เก็บข้อมูล


1

ฉันรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่นี่คือตัวอย่าง PowerShell:

Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}

$A มีขนาดของที่เก็บข้อมูลและมีพารามิเตอร์ keyname หากคุณต้องการขนาดของโฟลเดอร์เฉพาะในที่เก็บข้อมูล


ขั้นแรกให้เรียกใช้ Get-object ..line จากนั้นเรียกใช้ $ A (สำหรับผู้ที่ไม่คุ้นเคยกับ PowerShell)
Faiz

1

เพื่อตรวจสอบขนาดถังทั้งหมดลองสคริปต์ทุบตีนี้

s3list=`aws s3 ls | awk  '{print $3}'`
for s3dir in $s3list
do
    echo $s3dir
    aws s3 ls "s3://$s3dir"  --recursive --human-readable --summarize | grep "Total Size"
done

มันใช้งานได้ดีมาก
Mike Barlow - BarDev

การจับเอาท์พุทในตัวแปรเพียงเพื่อให้คุณสามารถวนลูปมันเป็น antipattern ที่สิ้นเปลือง
tripleee

1

คุณสามารถใช้s3cmd:

s3cmd du s3://Mybucket -H

หรือ

s3cmd du s3://Mybucket --human-readable

มันให้วัตถุทั้งหมดและขนาดของที่เก็บข้อมูลในรูปแบบที่อ่านได้ง่ายมาก


การduสำรวจรายการวัตถุทั้งหมดหรือดึงข้อมูลเมตาหรือไม่ ต้องการเวอร์ชันรายงาน api หรือสิ่งที่แสดงในคอนโซล aws จริงๆ ...
user67327

0

เฮ้มีเครื่องมือค้นหาข้อมูลเมตาสำหรับ AWS S3 ที่https://s3search.p3-labs.com/เครื่องมือนี้ให้สถิติเกี่ยวกับวัตถุในถังด้วยการค้นหาข้อมูลเมตา


0

นอกจากนี้ยังHanzo S3 เครื่องมือไม่นี้ เมื่อติดตั้งแล้วคุณสามารถทำสิ่งต่อไปนี้

s3ls -s -H bucketname

แต่ฉันเชื่อว่าสิ่งนี้จะรวมอยู่ในฝั่งไคลเอ็นต์และไม่ได้รับการเรียกผ่าน AWS API


0

โดยโปรแกรมCloudberryยังสามารถแสดงขนาดของที่เก็บข้อมูลจำนวนโฟลเดอร์และไฟล์ทั้งหมดคลิกที่ "คุณสมบัติ" ที่ด้านบนของที่เก็บข้อมูล


0

หากคุณไม่ต้องการที่จะใช้บรรทัดคำสั่งบน Windows และ OSX มีวัตถุประสงค์ทั่วไปของแอปจัดการไฟล์ระยะไกลที่เรียกว่าCyberduck เข้าสู่ S3 ที่มีการเข้าถึง / คู่คีย์ลับของคุณ, Calculateคลิกขวาที่ไดเรกทอรีคลิก


0

ฉันเขียนสคริปต์ Bash, s3-du.sh ที่จะแสดงรายการไฟล์ในที่เก็บข้อมูลด้วย s3ls และพิมพ์จำนวนไฟล์และขนาดเช่น

s3-du.sh testbucket.jonzobrist.com
149 files in bucket testbucket.jonzobrist.com
11760850920 B
11485205 KB
11216 MB
10 GB

สคริปต์แบบเต็ม:

#!/bin/bash

if [ “${1}” ]
then
NUM=0
COUNT=0
for N in `s3ls ${1} | awk ‘{print $11}’ | grep [0-9]`
do
NUM=`expr $NUM + $N`
((COUNT++))
done
KB=`expr ${NUM} / 1024`
MB=`expr ${NUM} / 1048576`
GB=`expr ${NUM} / 1073741824`
echo “${COUNT} files in bucket ${1}”
echo “${NUM} B”
echo “${KB} KB”
echo “${MB} MB”
echo “${GB} GB”
else
echo “Usage : ${0} s3-bucket”
exit 1
fi    

มันทำขนาดไดเรกทอรีย่อยตามที่ Amazon ส่งคืนชื่อไดเรกทอรีและขนาดของเนื้อหาทั้งหมด



-1

วิธีต่อไปนี้ใช้ AWS PHP SDK เพื่อรับขนาดทั้งหมดของที่เก็บข้อมูล

// make sure that you are using correct region (where the bucket is) to get new Amazon S3 client
$client = \Aws\S3\S3Client::factory(array('region' => $region));

// check if bucket exists
if (!$client->doesBucketExist($bucket, $accept403 = true)) {
    return false;
}
// get bucket objects
$objects = $client->getBucket(array('Bucket' => $bucket));

$total_size_bytes = 0;
$contents = $objects['Contents'];

// iterate through all contents to get total size
foreach ($contents as $key => $value) {
   $total_bytes += $value['Size'];
}
$total_size_gb = $total_size_bytes / 1024 / 1024 / 1024;

-1

มันใช้งานได้สำหรับฉัน ..

aws s3 ls s3://bucket/folder/ --recursive | awk '{sz+=$3} END {print sz/1024/1024 "MB"}'

3
คุณสามารถเพิ่มรายละเอียดเพิ่มเติมได้ไหม?
Pierre.Vriens

1
นี่เป็นคำตอบเดียวกับคำตอบอื่นที่โพสต์เมื่อประมาณหนึ่งปีก่อน
หลุยส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.