Trừ khi tôi thiếu một cái gì đó, có vẻ như không có API nào tôi đã xem sẽ cho bạn biết có bao nhiêu đối tượng trong một thùng S3 / thư mục (tiền tố). Có cách nào để có được một đếm?
Trừ khi tôi thiếu một cái gì đó, có vẻ như không có API nào tôi đã xem sẽ cho bạn biết có bao nhiêu đối tượng trong một thùng S3 / thư mục (tiền tố). Có cách nào để có được một đếm?
Câu trả lời:
Không có cách nào, trừ khi bạn
liệt kê tất cả chúng theo lô 1000 (có thể chậm và hút băng thông - amazon dường như không bao giờ nén các phản hồi XML), hoặc
đăng nhập vào tài khoản của bạn trên S3 và vào Tài khoản - Cách sử dụng. Có vẻ như phòng thanh toán biết chính xác có bao nhiêu đối tượng bạn đã lưu trữ!
Chỉ cần tải xuống danh sách tất cả các đối tượng của bạn sẽ thực sự mất một thời gian và tốn một số tiền nếu bạn có 50 triệu đối tượng được lưu trữ.
Cũng xem chủ đề này về StorageObjectCount - trong dữ liệu sử dụng.
API S3 để có được ít nhất những điều cơ bản, ngay cả khi nó đã cũ hàng giờ, sẽ rất tuyệt.
aws s3 ls s3://mybucket/ --recursive | wc -l
hoặc 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
Lưu ý: Lệnh cloudwatch ở trên dường như hoạt động trong một số thời gian không dành cho những người khác. Thảo luận tại đây: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Bạn có thể xem phần số liệu của cloudwatch để có được số lượng đối tượng được lưu trữ.
Tôi có khoảng 50 triệu sản phẩm và phải mất hơn một giờ để sử dụng aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Có một --summarize
công tắc bao gồm thông tin tóm tắt xô (tức là số lượng đối tượng, tổng kích thước).
Đây là câu trả lời đúng bằng AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Xem tài liệu
Total Objects: 7235
Total Size: 475566411749
- thật dễ dàng.
Mặc dù đây là một câu hỏi cũ và phản hồi đã được cung cấp vào năm 2015, nhưng bây giờ nó đơn giản hơn nhiều, vì Bảng điều khiển Web S3 đã kích hoạt tùy chọn "Lấy kích thước":
Cung cấp như sau:
Nếu bạn sử dụng công cụ dòng lệnh s3cmd , bạn có thể nhận được một danh sách đệ quy của một nhóm cụ thể, xuất nó thành một tệp văn bản.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Sau đó, trong linux bạn có thể chạy wc -l trên tệp để đếm các dòng (1 dòng trên mỗi đối tượng).
wc -l listing.txt
-r
trong là dành cho --recursive
, vì vậy nó cũng hoạt động cho các thư mục con.
aws s3 ls
thay vì s3cmd vì nó nhanh hơn. b.) Đối với các thùng lớn có thể mất nhiều thời gian. Mất khoảng 5 phút cho các tập tin 1mil. c.) Xem câu trả lời của tôi dưới đây về việc sử dụng cloudwatch.
Hiện tại có một giải pháp dễ dàng với API S3 (có sẵn trong AWS cli):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
hoặc cho một thư mục cụ thể:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
(phiên bản 1.2.9 của aws-cli), khi chỉ sử dụng --bucket my-bucket
và A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
khi sử dụng --bucket s3://my-bucket
. (Nó chắc chắn tồn tại và có hơn 1000 tệp.)
Bạn có thể dễ dàng lấy được tổng số và lịch sử nếu bạn đi đến tab "Quản lý" của bảng điều khiển s3 và sau đó nhấp vào "Số liệu" ... Ảnh chụp màn hình của tab
NumberOfObjects (count/day)
biểu đồ? Nó sẽ tốt hơn vì nó liên quan trực tiếp đến câu hỏi. Trong ảnh chụp màn hình của bạn, bạn đang hiển thị cái BucketSizeBytes (bytes/day)
nào, trong khi hữu ích, không liên quan trực tiếp đến vấn đề.
Api sẽ trả về danh sách theo gia số 1000. Kiểm tra thuộc tính IsTruncated để xem còn còn nữa không. Nếu có, bạn cần thực hiện một cuộc gọi khác và chuyển khóa cuối cùng mà bạn nhận được dưới dạng thuộc tính Marker trong cuộc gọi tiếp theo. Sau đó, bạn sẽ tiếp tục lặp như thế này cho đến khi IsTruncated là sai.
Xem tài liệu Amazon này để biết thêm thông tin: Lặp lại thông qua kết quả nhiều trang
Chủ đề cũ, nhưng vẫn có liên quan khi tôi đang tìm kiếm câu trả lời cho đến khi tôi chỉ cần tìm ra điều này. Tôi muốn đếm số tập tin bằng công cụ dựa trên GUI (tức là không có mã). Tôi tình cờ đã sử dụng một công cụ có tên 3Hub để kéo và thả chuyển đến và từ S3. Tôi muốn biết có bao nhiêu tệp tôi có trong một nhóm cụ thể (tôi không nghĩ việc thanh toán phá vỡ nó bằng xô).
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
Tôi đã có 20521 tệp trong thùng và đếm số tệp trong chưa đầy một phút.
Tôi đã sử dụng tập lệnh python từ scalablelogic.com (thêm vào ghi nhật ký đếm). Làm việc tuyệt vời.
#!/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
Trong s3cmd, chỉ cần chạy lệnh sau (trên hệ thống Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Một trong những cách đơn giản nhất để đếm số lượng đối tượng trong s3 là:
Bước 1: Chọn thư mục gốc Bước 2: Nhấp vào Hành động -> Xóa (Rõ ràng, cẩn thận không xóa nó) Bước 3: Đợi vài phút, aws sẽ hiển thị cho bạn số lượng đối tượng và tổng kích thước của nó.
UpVote nếu bạn tìm thấy giải pháp.
Không có API nào mang lại cho bạn số lượng vì thực sự không có API cụ thể nào của Amazon để làm điều đó. Bạn chỉ cần chạy một danh sách - nội dung và đếm số lượng kết quả được trả về.
Từ dòng lệnh trong AWS CLI, sử dụng ls plus --summarize
. Nó sẽ cung cấp cho bạn danh sách tất cả các mục của bạn và tổng số tài liệu trong một nhóm cụ thể. Tôi chưa thử điều này với các thùng chứa các thùng phụ:
aws s3 ls "s3://MyBucket" --summarize
Nó mất một chút thời gian (mất khoảng 4 phút để liệt kê các tài liệu 16 + K của tôi), nhưng nó nhanh hơn so với việc đếm 1K mỗi lần.
Làm thế nào về phân tích lớp lưu trữ S3 - Bạn nhận API cũng như trên bảng điều khiển - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-st Storage- class.html
Bạn có thể tải xuống và cài đặt trình duyệt s3 từ http://s3browser.com/ . Khi bạn chọn một nhóm ở góc bên phải, bạn có thể thấy số lượng tệp trong nhóm. Nhưng, kích thước nó hiển thị không chính xác trong phiên bản hiện tại.
Gub
Cách dễ nhất là sử dụng bảng điều khiển dành cho nhà phát triển, ví dụ: nếu bạn đang sử dụng chrome, hãy chọn Công cụ dành cho nhà phát triển và bạn có thể thấy sau đây, bạn có thể tìm và đếm hoặc thực hiện một số kết quả khớp, như 280-279 + 1 = 2
...
Tôi thấy công cụ trình duyệt S3 rất người dùng, nó cung cấp các tệp và thư mục và tổng số lượng cũng như kích thước cho bất kỳ thư mục nào theo cách đệ quy
Liên kết tải xuống: https://s3browser.com/doad.aspx
Bạn chỉ có thể thực hiện lệnh cli này để lấy tổng số tệp trong nhóm hoặc một thư mục cụ thể
Quét toàn bộ xô
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
bạn có thể sử dụng lệnh này để biết chi tiết
aws s3api list-objects-v2 --bucket BUCKET_NAME
Quét một thư mục cụ thể
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
Nếu bạn đang tìm kiếm các tệp cụ thể, hãy nói .jpg
hình ảnh, bạn có thể làm như sau:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Sau đây là cách bạn có thể làm điều đó bằng cách sử dụng java client.
<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;
}
}
Đây là phiên bản boto3 của tập lệnh python được nhúng ở trên.
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)`
aws s3 ls s3: // xô-name / thư mục-tiền tố-if-any --recursive | wc -l