ฉันจะบอกได้ว่ามีวัตถุกี่ชิ้นที่ฉันเก็บไว้ในที่เก็บ S3


155

ถ้าฉันไม่มีอะไรหายไปดูเหมือนว่าไม่มี API ใดที่ฉันได้ดูจะบอกคุณว่ามีวัตถุจำนวนเท่าใดใน S3 bucket / โฟลเดอร์ (คำนำหน้า) มีวิธีใดบ้างที่จะได้รับการนับ?


คำถามนี้อาจมีประโยชน์: stackoverflow.com/questions/701545/…
Brendan Long

1
โซลูชันมีอยู่ในปี 2558: stackoverflow.com/a/32908591/578989
Mayank Jaiswal

ดูคำตอบของฉันด้านล่าง: stackoverflow.com/a/39111698/996926
advncd

คำตอบ:


39

ไม่มีทางเว้นแต่คุณ

  1. แสดงรายการทั้งหมดในแบตช์ 1,000 (ซึ่งอาจช้าและดูดแบนด์วิดท์ - ดูเหมือนว่า amazon จะไม่บีบอัดการตอบสนอง XML) หรือ

  2. เข้าสู่ระบบบัญชีของคุณใน S3 และไปที่บัญชี - การใช้งาน ดูเหมือนว่าแผนกการเรียกเก็บเงินรู้จำนวนวัตถุที่คุณเก็บไว้อย่างแน่นอน!

เพียงแค่ดาวน์โหลดรายการของวัตถุทั้งหมดของคุณจริง ๆ แล้วจะใช้เวลาและค่าใช้จ่ายเงินถ้าคุณมี 50 ล้านวัตถุที่เก็บไว้

ดูหัวข้อนี้เกี่ยวกับ StorageObjectCountซึ่งอยู่ในข้อมูลการใช้งาน

S3 API เพื่อให้ได้พื้นฐานอย่างน้อยแม้ว่าจะเป็นชั่วโมงมันก็ยอดเยี่ยม


ลิงค์นั้นตายไปแล้ว
เขตข้อมูล


หากคุณขี้เกียจเหมือนฉันNewvemจะทำสิ่งนี้ในนามของคุณและรวบรวม / ติดตามผลในระดับต่อถังในบัญชี S3 ของคุณ
rcoup

2
คุณสามารถอัปเดตคำตอบของคุณเพื่อรวมการตอบกลับของ @ MayankJaiswal ได้หรือไม่
Joseph Casey

1
ฝ่ายการเรียกเก็บเงินรู้ทั้งหมด! ไม่น่าแปลกใจที่พวกเขามีอำนาจที่จะรื้อชายฝั่งตะวันออก s3 โดยไม่ได้ตั้งใจ
ski_squaw

256

ใช้ AWS CLI

aws s3 ls s3://mybucket/ --recursive | wc -l 

หรือ

aws cloudwatch get-metric-statistics \
  --namespace AWS/S3 --metric-name NumberOfObjects \
  --dimensions Name=BucketName,Value=BUCKETNAME \
              Name=StorageType,Value=AllStorageTypes \
  --start-time 2016-11-05T00:00 --end-time 2016-11-05T00:10 \
  --period 60 --statistic Average

หมายเหตุ: คำสั่ง cloudwatch ข้างต้นดูเหมือนว่าจะทำงานสำหรับบางคนในขณะที่ไม่ได้สำหรับคนอื่น ๆ พูดคุยที่นี่: https://forums.aws.amazon.com/thread.jspa?threadID=217050

การใช้ AWS Web Console

คุณสามารถดูส่วนการวัดของ cloudwatchเพื่อรับจำนวนวัตถุที่จัดเก็บโดยประมาณ ป้อนคำอธิบายรูปภาพที่นี่

ฉันมีผลิตภัณฑ์ประมาณ 50 ล้านชิ้นและใช้เวลามากกว่าหนึ่งชั่วโมงในการนับ aws s3 ls


18
สิ่งนี้ควรอยู่ใกล้กับด้านบนสุด
Joseph Casey

3
@JosephMCasey ฉันเห็นด้วย นอกจากนี้ยังทำงานเพื่อให้จำนวนของวัตถุในไดเรกทอรีกับถังเช่นนี้:aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
ทิมปีเตอร์สัน

1
ให้ข้อผิดพลาดนี้เมื่อฉันเรียกใช้ข้างต้นใน cmd prompt - 'wc' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์ - ฉันค่อนข้างใหม่กับสิ่งนี้ดังนั้นใครบางคนสามารถให้ทางออกได้?
Sandun

คำเตือนว่า CloudWatch ดูเหมือนจะไม่น่าเชื่อถือมาก ฉันมีไฟล์ mp4 ในที่เก็บข้อมูลหนึ่งที่ CloudWatch (NumberOfObjects metric) นับเป็น 2,300 วัตถุแยกต่างหาก ฉันได้รับหมายเลขที่ถูกต้องด้วย AWS CLI
AlexK

ทำไม "เฉลี่ย" มีใครบางคนที่ไม่ต้องการ "รวม" แทนไหม?
ffxsam

150

มี--summarizeสวิตช์ซึ่งมีข้อมูลสรุปของที่เก็บข้อมูล (เช่นจำนวนวัตถุขนาดรวม)

นี่คือคำตอบที่ถูกต้องโดยใช้ AWS cli:

aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"

Total Objects: 194273

ดูเอกสารประกอบ


4
นี่ยอดเยี่ยม: Total Objects: 7235 Total Size: 475566411749- ง่ายมาก
2560

16
ยังคงมีค่าใช้จ่ายที่สำคัญในการแสดงรายการวัตถุนับพัน แต่น่าเสียดายที่ (ปัจจุบันที่ 600,000 บวกจึงค่อนข้างใช้เวลานาน)
MichaelChirico

ต้องเสียค่าใช้จ่ายเท่าไรในการรันภารกิจนี้ด้วย bucket กับวัตถุ 5M
Psychozoic

2
คำตอบนี้ไม่มีประสิทธิภาพมากอาจช้าและมีราคาแพง มันวนซ้ำทั้งถังเพื่อค้นหาคำตอบ
ผู้ทอผ้า

2
และฉันอาจจะเพิ่มว่าการทำซ้ำวัตถุมากกว่า 1.2 พันล้านชิ้นที่จัดเก็บในหน่วยความจำมาตรฐานอาจมีราคาประมาณ $ 6,000 เหรียญ
C Johnson

66

แม้ว่านี่จะเป็นคำถามเก่าและข้อเสนอแนะถูกให้ในปี 2015 ตอนนี้มันง่ายกว่ามากเนื่องจาก S3 Web Console ได้เปิดใช้งานตัวเลือก "รับขนาด":

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

ซึ่งให้บริการดังต่อไปนี้:

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


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

11
ดูเหมือนว่าจะใช้งานได้ในระดับโฟลเดอร์เท่านั้น "รับขนาด" ไม่สามารถใช้งานได้ในระดับที่เก็บข้อมูล
G-

1
@ G- ถ้าคุณเลือกโฟลเดอร์ทั้งหมดของที่เก็บข้อมูล
gvasquez

4
@ G- อย่างไรก็ตามกล่อง "เลือกทั้งหมด" จะเลือกเฉพาะโฟลเดอร์และวัตถุที่แสดงในหน้าไม่ใช่โฟลเดอร์ / วัตถุทั้งหมดของที่เก็บข้อมูล
gparis

2
@ จุดดีปารีส สังเกตได้ดีคุ้มค่า ขอบคุณ ดังนั้นจึงปรากฏว่าในคอนโซลเราไม่มีตัวเลือกหากมีไฟล์หรือโฟลเดอร์มากกว่าที่จะแสดงในหน้าเดียว
G-

50

หากคุณใช้เครื่องมือบรรทัดคำสั่งs3cmdคุณสามารถรับรายชื่อ recursive ของที่ฝากข้อมูลเฉพาะแล้วส่งออกไปยังไฟล์ข้อความ

s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt

จากนั้นใน linux คุณสามารถเรียกใช้ wc -l บนไฟล์เพื่อนับบรรทัด (1 บรรทัดต่อวัตถุ)

wc -l listing.txt

-rในคำสั่งสำหรับ--recursiveดังนั้นจึงควรทำงานสำหรับโฟลเดอร์ย่อยได้เป็นอย่างดี
Deepak Joy

3 บันทึกเกี่ยวกับเรื่องนี้ ก.) คุณควรใช้aws s3 lsมากกว่า s3cmd เพราะเร็วกว่า b.) สำหรับถังขนาดใหญ่อาจใช้เวลานาน ใช้เวลาประมาณ 5 นาทีสำหรับไฟล์ 1mil c.) ดูคำตอบของฉันด้านล่างเกี่ยวกับการใช้ cloudwatch
mastaBlasta

46

มีวิธีแก้ปัญหาง่าย ๆ กับ S3 API ตอนนี้ (มีให้ใน AWS cli):

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

หรือสำหรับโฟลเดอร์เฉพาะ:

aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"

1
Raphael แบบสอบถามโฟลเดอร์ของคุณใช้งานได้ดียกเว้นเมื่อโฟลเดอร์ว่างเปล่าหรือไม่มีอยู่คุณจะได้รับ: ในความยาวฟังก์ชั่น () ประเภทที่ไม่ถูกต้องสำหรับค่า: ไม่มีคาดว่าจะเป็นหนึ่งใน: ['string', 'array' , 'object'], ได้รับ: "null" มีวิธีที่จะทำให้ผลลัพธ์เป็น 0 หรือไม่ถ้าโฟลเดอร์ว่างเปล่าหรือไม่ออก?
3591836

1
ฉันจะได้รับIllegal token value '(Contents[])]' (เวอร์ชั่น 1.2.9 ของ AWS-CLI) เมื่อเพียงแค่ใช้--bucket my-bucketและเมื่อใช้A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist --bucket s3://my-bucket(มีอยู่จริงและมีไฟล์มากกว่า 1,000 ไฟล์)
Darren Cook

@DarrenCook ลบ s3: // จากชื่อที่ฝากข้อมูล ดูเหมือนว่าลูกค้าจะไม่สนับสนุนโปรโตคอล
Sriranjan Manjunath

นี่คือเร็วกว่าตัวอย่าง wc -l ด้วยที่เก็บของฉันมันจะนับวัตถุประมาณ 3-4k / วินาที ดังนั้นประมาณ 5 ล้านต่อวัตถุ "รับขนาด" ใน S3 web GUI น่าจะใช้สิ่งที่คล้ายกันภายใต้ประทุนเนื่องจากใช้เวลาประมาณคร่าวๆ
notpeter

สำหรับถังขนาดใหญ่มากนี่เป็นทางออกเดียวที่ทำงานให้ฉันภายในเวลาที่เหมาะสมจาก (น้อยกว่า 20 นาที)
Nick Sarafa

40

คุณสามารถใช้เมตริก AWS cloudwatch สำหรับ s3 เพื่อดูจำนวนที่แน่นอนของที่เก็บข้อมูลแต่ละอัน ตัวชี้วัด cloudwatch เมื่อคุณเลือกที่เก็บข้อมูล


ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด
Oktav

คำตอบที่แท้จริงเพียงคำเดียวโดยไม่ทำอะไรที่ไร้สาระเช่นการกดแป้น 1m + ฉันลืมมันไปแล้ว
Andrew Backer

ต้องใช้ upvotes มากกว่านี้ โซลูชันอื่น ๆ ทุกเครื่องชั่งไม่ดีในแง่ของต้นทุนและเวลา
แอรอนอาร์

5

ไปที่การเรียกเก็บเงิน AWS จากนั้นรายงานจากนั้นรายงานการใช้ AWS เลือก Amazon Simple Storage Service จากนั้นเลือก Operation StandardStorage จากนั้นคุณสามารถดาวน์โหลดไฟล์ CSV ที่มี UsageType ของ StorageObjectCount ที่แสดงรายการจำนวนสำหรับที่เก็บข้อมูลแต่ละชุด


4

คุณสามารถรับจำนวนรวมและประวัติได้อย่างง่ายดายหากคุณไปที่แท็บ "การจัดการ" คอนโซล s3 จากนั้นคลิกที่ "ตัวชี้วัด" ... ภาพหน้าจอของแท็บ


คุณสามารถปรับปรุงรูปภาพเพื่อแสดงNumberOfObjects (count/day)แผนภูมิได้หรือไม่ มันจะดีกว่าเนื่องจากมันเกี่ยวข้องกับคำถามโดยตรง ในภาพหน้าจอของคุณคุณกำลังแสดงสิ่งBucketSizeBytes (bytes/day)ที่มีประโยชน์ซึ่งไม่เกี่ยวข้องกับปัญหาโดยตรง
guzmonne

1
ตั้งแต่ 2019 นี่ควรจะเป็นคำตอบที่ได้รับการยอมรับ ส่วนที่เหลือทั้งหมดล้าสมัยหรือช้า
C Johnson เมื่อ

2

api จะส่งคืนรายการทีละ 1,000 ตรวจสอบคุณสมบัติ IsTruncated เพื่อดูว่ายังมีอีกไหม หากมีคุณต้องทำการโทรอีกครั้งและส่งผ่านคีย์สุดท้ายที่คุณได้รับเป็นคุณสมบัติเครื่องหมายในการโทรครั้งต่อไป จากนั้นคุณจะวนซ้ำแบบนี้ต่อไปจนกว่า IsTruncated จะเป็นเท็จ

ดูเอกสาร Amazon นี้สำหรับข้อมูลเพิ่มเติม: การวนซ้ำผ่านผลลัพธ์หลายหน้า


2

หัวข้อเก่า แต่ยังคงมีความเกี่ยวข้องขณะที่ฉันกำลังมองหาคำตอบจนกว่าฉันจะคิดออก ฉันต้องการนับไฟล์โดยใช้เครื่องมือที่ใช้ GUI (เช่นไม่มีรหัส) ฉันใช้เครื่องมือที่เรียกว่า 3Hub แล้วสำหรับการลากและวางการถ่ายโอนไปยังและจาก S3 ฉันต้องการทราบจำนวนไฟล์ที่ฉันมีในที่เก็บข้อมูลชุดใดชุดหนึ่ง (ฉันไม่คิดว่าการเรียกเก็บเงินแบ่งเป็นส่วนย่อย)

So, using 3Hub, 
- list the contents of the bucket (looks basically like a finder or explorer window)
- go to the bottom of the list, click 'show all'
- select all (ctrl+a)
- choose copy URLs from right-click menu
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count  

ฉันมีไฟล์ 20521 ในที่ฝากข้อมูลและนับจำนวนไฟล์ในเวลาน้อยกว่าหนึ่งนาที


2

ฉันใช้สคริปต์ python จากscalablelogic.com (เพิ่มในการบันทึกนับ) ใช้งานได้ดีมาก

#!/usr/local/bin/python

import sys

from boto.s3.connection import S3Connection

s3bucket = S3Connection().get_bucket(sys.argv[1])
size = 0
totalCount = 0

for key in s3bucket.list():
    totalCount += 1
    size += key.size

print 'total size:'
print "%.3f GB" % (size*1.0/1024/1024/1024)
print 'total count:'
print totalCount

เพื่อให้คุณทราบว่านี่ใช้ไม่ได้กับ boto3 ฉันมีส่วนร่วมกับข้อเสนอแนะด้านล่างเป็นคำตอบที่แตกต่างกัน
fuzzygroup

2

ใน s3cmd เพียงเรียกใช้คำสั่งต่อไปนี้ (บนระบบ Ubuntu):

s3cmd ls -r s3://mybucket | wc -l

13
ทำไมคุณไม่รื้อฟื้นคำถาม 5 ปีเพื่อแสดงสำเนาในรูปแบบที่ไม่ดีของคำตอบที่มีอยู่ ?
นักเล่นแร่แปรธาตุ Two-Bit

คำตอบก่อนหน้านี้ส่งเอาต์พุตไปยังไฟล์ txt โดยไม่จำเป็น
mjsa

10
IMO นี่ควรเป็นความเห็นต่อคำตอบนั้น นี่เป็นข้อแตกต่างเล็กน้อย
นักเล่นแร่แปรธาตุ Two-Bit

2
ดูเหมือนว่าจะเป็นคำตอบที่สมควร - โดยเฉพาะตั้งแต่คำตอบที่เลือกสำหรับคำถามนี้เริ่มต้นด้วย 'ไม่มีทาง ... ' และ @mjsa ได้ให้คำตอบแบบบรรทัดเดียว
น่าน

นี่ไม่ใช่คำตอบที่ดีเพราะมันไม่ได้คำนึงถึงวัตถุที่มีเวอร์ชัน
3h4x

2

หากคุณใช้ AWS CLI บน Windows คุณสามารถใช้Measure-Objectจาก PowerShell เพื่อรับจำนวนไฟล์ทั้งหมดเช่นเดียวwc -lกับ * nix

PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object

Count    : 25
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

หวังว่ามันจะช่วย


2

หนึ่งในวิธีที่ง่ายที่สุดในการนับจำนวนวัตถุใน s3 คือ:

ขั้นที่ 1: เลือกโฟลเดอร์รากขั้นที่ 2: คลิกที่การกระทำ -> ลบ (เห็นได้ชัดว่าระวังอย่าลบมัน) ขั้นที่ 3: รอสักครู่นาที aws จะแสดงจำนวนวัตถุและขนาดรวมของมัน

โหวตถ้าคุณค้นหาวิธีแก้ปัญหา


1

ไม่มี API ใดที่จะให้คุณนับได้เพราะไม่มี API เฉพาะของ Amazon ที่จะทำเช่นนั้น คุณต้องเรียกใช้ลิสต์เนื้อหาและนับจำนวนผลลัพธ์ที่ส่งคืน


ด้วยเหตุผลบางอย่างทับทิม libs (right_aws / appoxy_aws) จะไม่แสดงรายการวัตถุมากกว่า 1,000 รายการแรกในที่เก็บข้อมูล มีคนอื่นที่จะแสดงรายการวัตถุทั้งหมดหรือไม่
ฟิลด์

เมื่อคุณขอรายการพวกเขาจะให้ฟิลด์ "NextToken" ซึ่งคุณสามารถใช้เพื่อส่งคำขออีกครั้งด้วยโทเค็นและมันจะแสดงรายการเพิ่มเติม
Mitch Dempsey

1

จากบรรทัดคำสั่งใน AWS CLI ls plus --summarizeใช้ มันจะให้รายชื่อของรายการทั้งหมดของคุณและจำนวนเอกสารทั้งหมดในที่เก็บข้อมูลเฉพาะ ฉันยังไม่ได้ลองกับถังที่มีถังย่อย:

aws s3 ls "s3://MyBucket" --summarize

ใช้เวลานานหน่อย (ใช้รายการเอกสาร 16 + K ของฉันประมาณ 4 นาที) แต่มันเร็วกว่านับ 1K ต่อครั้ง



0

3Hubถูกยกเลิก มีวิธีแก้ปัญหาที่ดีกว่าคือคุณสามารถใช้การส่ง (Mac เท่านั้น) จากนั้นคุณเชื่อมต่อกับที่เก็บข้อมูลของคุณแล้วเลือกShow Item CountจากViewเมนู


โชคไม่ดีที่ส่งได้เพียง 1,000 รายการเท่านั้น (และนับจำนวนรายการได้สูงสุด 1,000 รายการ)
Tino

0

คุณสามารถดาวน์โหลดและติดตั้งเบราว์เซอร์ s3 ได้จากhttp://s3browser.com/ http://s3browser.com/เมื่อคุณเลือกที่เก็บข้อมูลที่มุมขวาตรงกลางคุณจะเห็นจำนวนไฟล์ในที่เก็บข้อมูล แต่ขนาดที่แสดงนั้นไม่ถูกต้องในเวอร์ชันปัจจุบัน

Gubs


0

วิธีที่ง่ายที่สุดคือการใช้คอนโซลนักพัฒนาซอฟต์แวร์ตัวอย่างเช่นหากคุณใช้ Chrome ให้เลือกเครื่องมือสำหรับนักพัฒนาและคุณสามารถดูสิ่งต่อไปนี้คุณสามารถค้นหาและนับหรือทำการแข่งขันเช่น 280-279 + 1 = 2

...


คุณช่วยเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้เครื่องมือของนักพัฒนาซอฟต์แวร์เพื่อหาจำนวนวัตถุทั้งหมดในที่เก็บข้อมูล
Jugal Panchal

0

คุณสามารถใช้สินค้าคงคลัง Amazon S3 ที่จะให้รายชื่อวัตถุในไฟล์ csv แก่คุณ


0

ฉันพบเครื่องมือเบราว์เซอร์ S3 ผู้ใช้มากมันให้ไฟล์และโฟลเดอร์และจำนวนรวมเช่นกันสำหรับโฟลเดอร์ใด ๆ ที่เกิดซ้ำ

ลิงค์ดาวน์โหลด: https://s3browser.com/download.aspx



0

คุณสามารถรันคำสั่ง cli นี้เพื่อรับจำนวนไฟล์ทั้งหมดในที่เก็บข้อมูลหรือโฟลเดอร์เฉพาะ

สแกนที่เก็บข้อมูลทั้งหมด

aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l

คุณสามารถใช้คำสั่งนี้เพื่อรับรายละเอียด

aws s3api list-objects-v2 --bucket BUCKET_NAME

สแกนโฟลเดอร์เฉพาะ

aws s3api list-objects-v2 --bucket testbucket --prefix testfolder --start-after testfolder/ | grep "Key" | wc -l

aws s3api list-objects-v2 --bucket BUCKET_NAME --prefix FOLDER_NAME --start-after FOLDER_NAME/ | grep "Key" | wc -l

0

หากคุณกำลังมองหาไฟล์ที่เฉพาะเจาะจงสมมติว่า.jpgภาพคุณสามารถทำสิ่งต่อไปนี้:

aws s3 ls s3://your_bucket | grep jpg | wc -l

0

ต่อไปนี้เป็นวิธีที่คุณสามารถทำได้โดยใช้ไคลเอนต์ java

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.519</version>
</dependency>
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;

public class AmazonS3Service {

    private static final String S3_ACCESS_KEY_ID = "ACCESS_KEY";
    private static final String S3_SECRET_KEY = "SECRET_KEY";
    private static final String S3_ENDPOINT = "S3_URL";

    private AmazonS3 amazonS3;

    public AmazonS3Service() {
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setProtocol(Protocol.HTTPS);
        clientConfiguration.setSignerOverride("S3SignerType");
        BasicAWSCredentials credentials = new BasicAWSCredentials(S3_ACCESS_KEY_ID, S3_SECRET_KEY);
        AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
        AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration(S3_ENDPOINT, null);
        amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider).withClientConfiguration(clientConfiguration)
                .withPathStyleAccessEnabled(true).withEndpointConfiguration(endpointConfiguration).build();
    }

    public int countObjects(String bucketName) {
        int count = 0;
        ObjectListing objectListing = amazonS3.listObjects(bucketName);
        int currentBatchCount = objectListing.getObjectSummaries().size();
        while (currentBatchCount != 0) {
            count += currentBatchCount;
            objectListing = amazonS3.listNextBatchOfObjects(objectListing);
            currentBatchCount = objectListing.getObjectSummaries().size();
        }
        return count;
    }
}

0

นี่คือสคริปต์หลาม boto3 เวอร์ชันที่ฝังอยู่ด้านบน

import sys
import boto3

s3 = boto3.resource('s3')
s3bucket = s3.Bucket(sys.argv[1])
size = 0
totalCount = 0

for key in s3bucket.objects.all():
    totalCount += 1
    size += key.size

print('total size:')
print("%.3f GB" % (size*1.0/1024/1024/1024))
print('total count:')
print(totalCount)`

0

aws s3 ls s3: // bucket-name / folder-prefix-if-any --recursive | ห้องสุขา -l


มันใช้งานได้มากกว่า 1,000 มันนับ 4258 ให้ฉัน
KingAndrew

บรรทัดไม่ตรงกับจำนวนไฟล์โดยตรง เพราะพวกเขายังมีทั้งบรรทัดสำหรับวันที่และไดเรกทอรี
CMCDragonkai

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