जब तक मैं कुछ याद नहीं कर रहा हूं, ऐसा लगता है कि जिन एपीआई को मैंने देखा है, उनमें से कोई भी आपको नहीं बताएगा कि S3 बाल्टी / फ़ोल्डर (उपसर्ग) में कितने ऑब्जेक्ट हैं। क्या कोई गिनती पाने का कोई तरीका है?
जब तक मैं कुछ याद नहीं कर रहा हूं, ऐसा लगता है कि जिन एपीआई को मैंने देखा है, उनमें से कोई भी आपको नहीं बताएगा कि S3 बाल्टी / फ़ोल्डर (उपसर्ग) में कितने ऑब्जेक्ट हैं। क्या कोई गिनती पाने का कोई तरीका है?
जवाबों:
कोई रास्ता नहीं है, जब तक आप
उन सभी को 1000 के बैचों में सूचीबद्ध करें (जो धीमा हो सकता है और बैंडविड्थ को चूस सकता है - अमेज़ॅन को लगता है कि कभी भी एक्सएमएल प्रतिक्रियाओं को संपीड़ित नहीं किया जाता है), या
S3 पर अपने खाते में लॉग इन करें, और खाता - उपयोग पर जाएं। ऐसा लगता है कि बिलिंग विभाग को पता है कि आपने कितनी वस्तुओं को संग्रहीत किया है!
बस अपनी सभी वस्तुओं की सूची को डाउनलोड करने में वास्तव में कुछ समय लगेगा और यदि आपके पास 50 मिलियन ऑब्जेक्ट संग्रहीत हैं तो कुछ पैसे खर्च होंगे।
इस धागे को StorageObjectCount के बारे में भी देखें - जो उपयोग डेटा में है।
कम से कम मूल बातें प्राप्त करने के लिए एक S3 एपीआई, भले ही यह घंटों पुराना हो, बहुत अच्छा होगा।
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
नोट: उपरोक्त क्लाउडवॉच कमांड कुछ के लिए काम करती है जबकि कुछ अन्य के लिए नहीं। यहां चर्चा की गई: https://forums.aws.amazon.com/thread.jspa?threadID=217050
आप क्लाउडवॉच के मेट्रिक सेक्शन को देख सकते हैं कि इसमें कितनी संख्या में वस्तुओं को संग्रहीत किया गया है।
मेरे पास लगभग 50 मिलियन उत्पाद हैं और उपयोग करने के लिए गणना करने में एक घंटे से अधिक समय लगा aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
एक --summarize
स्विच है जिसमें बाल्टी सारांश जानकारी (यानी वस्तुओं की संख्या, कुल आकार) शामिल है।
यहां AWS cli का उपयोग करके सही उत्तर दिया गया है:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
दस्तावेज देखें
Total Objects: 7235
Total Size: 475566411749
- इतना आसान है।
हालांकि यह एक पुराना सवाल है, और 2015 में प्रतिक्रिया प्रदान की गई थी, अभी यह बहुत सरल है, क्योंकि S3 वेब कंसोल ने "गेट आकार" विकल्प को सक्षम किया है:
जो निम्नलिखित प्रदान करता है:
यदि आप उपयोग करते हैं s3cmd कमांड-लाइन टूल का , तो आप एक विशेष बाल्टी की पुनरावर्ती सूची प्राप्त कर सकते हैं, इसे एक पाठ फ़ाइल में आउटपुट कर सकते हैं।
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
फिर लाइनक्स में आप लाइनों (1 पंक्ति प्रति ऑब्जेक्ट) की गणना करने के लिए फ़ाइल पर एक wc -l चला सकते हैं।
wc -l listing.txt
-r
आदेश में के लिए है --recursive
, तो यह रूप में अच्छी तरह उप फ़ोल्डरों के लिए काम करना चाहिए।
aws s3 ls
s3cmd के बजाय उपयोग करना चाहिए क्योंकि यह तेज है। बी।) बड़ी बाल्टियों के लिए एक लंबा समय लग सकता है। 1mil फ़ाइलों के लिए लगभग 5 मिनट लिया। सी।) क्लाउडवॉच का उपयोग करने के बारे में नीचे मेरा जवाब देखें।
अब S3 API के साथ एक आसान समाधान है (AWS क्ली में उपलब्ध):
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[])]"
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
। (यह निश्चित रूप से मौजूद है, और इसमें 1000+ फाइलें हैं।)
आप प्रत्येक बकेट के लिए सटीक गणना देखने के लिए s3 के लिए AWS क्लाउडवॉच मेट्रिक्स का उपयोग कर सकते हैं।
आप आसानी से कुल गणना और इतिहास प्राप्त कर सकते हैं यदि आप s3 कंसोल "प्रबंधन" टैब पर जाते हैं और फिर "मेट्रिक्स" पर क्लिक करें ... टैब का स्क्रीन शॉट
NumberOfObjects (count/day)
चार्ट दिखाने के लिए तस्वीर को अपडेट कर सकते हैं ? यह बेहतर होगा क्योंकि इसके सीधे सवाल से संबंधित है। आपके स्क्रीनशॉट में, आप दिखा रहे हैं BucketSizeBytes (bytes/day)
, जबकि उपयोगी, सीधे मुद्दे से संबंधित नहीं है।
एपी 1000 की वेतन वृद्धि में सूची लौटाएगा। यह देखने के लिए कि क्या अभी भी अधिक हैं, IsTruncated संपत्ति की जाँच करें। यदि वहाँ हैं, तो आपको एक और कॉल करने की आवश्यकता है और अगली कॉल पर मार्कर की संपत्ति के रूप में मिली अंतिम कुंजी को पास करें। आप तब तक इस तरह लूप करते रहेंगे जब तक कि IsTruncated झूठा न हो जाए।
अधिक जानकारी के लिए इस अमेज़न डॉक को देखें: मल्टी-पेज परिणाम के माध्यम से Iterating
पुराने धागे, लेकिन अभी भी प्रासंगिक के रूप में मैं जवाब के लिए देख रहा था जब तक मैं सिर्फ यह पता लगा। मुझे GUI- आधारित टूल (अर्थात कोई कोड) का उपयोग करके एक फ़ाइल गणना चाहिए थी। मैं पहले से ही S3 से ड्रैग एंड ड्रॉप ट्रांसफर के लिए 3Hub नामक टूल का उपयोग करता हूं। मैं जानना चाहता था कि एक विशेष बाल्टी में मेरे पास कितनी फाइलें हैं (मुझे नहीं लगता कि यह बाल्टी से टूट जाती है)।
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 फाइलें थीं और एक मिनट से भी कम समय में फाइल की गिनती हुई।
मैं से अजगर स्क्रिप्ट का इस्तेमाल किया 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
S3cmd में, बस निम्न कमांड चलाएं (उबंटू सिस्टम पर):
s3cmd ls -r s3://mybucket | wc -l
यदि आप Windows पर AWS CLI का उपयोग कर रहे हैं, तो आप Measure-Object
PowerShell से फ़ाइलों की कुल संख्या प्राप्त करने के लिए उपयोग कर सकते हैं , ठीक वैसे ही जैसे wc -l
* nix पर।
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
आशा करता हूँ की ये काम करेगा।
S3 में वस्तुओं की संख्या की गणना करने का सबसे सरल तरीका है:
Step1: रूट फ़ोल्डर का चयन करें Step2: क्रिया पर क्लिक करें -> हटाएं (जाहिर है, सावधान रहें इसे हटाएं नहीं) Step3: कुछ मिनट प्रतीक्षा करें aws आपको ऑब्जेक्ट्स की संख्या और उसका कुल आकार दिखाएगा।
अगर आपको इसका हल मिल जाए तो UpVote करें।
एपीआई में से कोई भी आपको एक गिनती नहीं देगा क्योंकि ऐसा करने के लिए वास्तव में कोई अमेज़न विशिष्ट एपीआई नहीं है। आपको केवल एक सूची-सामग्री चलानी होगी और वापस किए गए परिणामों की संख्या की गणना करनी होगी।
AWS सीएलआई में कमांड लाइन से, उपयोग करें ls plus --summarize
। यह आपको अपने सभी वस्तुओं की सूची और एक विशेष बाल्टी में दस्तावेजों की कुल संख्या देगा। मैंने उप-बाल्टियों वाली बाल्टियों के साथ यह कोशिश नहीं की है:
aws s3 ls "s3://MyBucket" --summarize
यह थोड़ा लंबा हो जाता है (इसमें 4 मिनट के बारे में मेरे 16 + के दस्तावेजों को सूचीबद्ध किया गया), लेकिन यह एक समय में 1K की गिनती की तुलना में तेज़ है।
S3 स्टोरेज क्लास एनालिटिक्स के बारे में कैसे - आपको एपीआई के साथ-साथ कंसोल भी मिलता है - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
आप http://s3browser.com/ से s3 ब्राउज़र डाउनलोड और इंस्टॉल कर सकते हैं । जब आप केंद्र दाएं कोने में एक बाल्टी का चयन करते हैं तो आप बाल्टी में फ़ाइलों की संख्या देख सकते हैं। लेकिन, वर्तमान संस्करण में इसका आकार गलत है।
Gubs
सबसे आसान तरीका डेवलपर कंसोल का उपयोग करना है, उदाहरण के लिए, यदि आप क्रोम पर हैं, तो डेवलपर टूल चुनें, और आप निम्नलिखित देख सकते हैं, आप 280-279 + 1 = 2 जैसे कुछ मैच या तो ढूंढ और गिन सकते हैं या कर सकते हैं।
...
मुझे S3 ब्राउज़र टूल बहुत उपयोगकर्ता के रूप में मिला, यह फ़ाइलों और फ़ोल्डरों और कुल गणना के साथ-साथ किसी भी फ़ोल्डर के लिए पुनरावर्ती आकार प्रदान करता है
डाउनलोड लिंक: https://s3browser.com/download.aspx
के साथ भी किया जा सकता है gsutil du
(हाँ, Google क्लाउड टूल)
gsutil du s3://mybucket/ | wc -l
बाल्टी या विशिष्ट फ़ोल्डर में कुल फ़ाइल संख्या प्राप्त करने के लिए आप इस 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
यदि आप विशिष्ट फ़ाइलों की तलाश कर रहे हैं, तो हम कहते हैं कि .jpg
आप निम्न चित्र कर सकते हैं:
aws s3 ls s3://your_bucket | grep jpg | wc -l
निम्नलिखित आप जावा क्लाइंट का उपयोग करके कैसे कर सकते हैं।
<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;
}
}
यहाँ ऊपर उल्लिखित अजगर स्क्रिप्ट का 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)`
aws s3 ls s3: // बाल्टी-नाम / फ़ोल्डर-उपसर्ग-अगर-कोई -recursive | wc -l