Sofern mir nichts fehlt, scheint Ihnen keine der von mir untersuchten APIs zu sagen, wie viele Objekte sich in einem S3-Bucket / Ordner (Präfix) befinden. Gibt es eine Möglichkeit, eine Zählung zu erhalten?
Sofern mir nichts fehlt, scheint Ihnen keine der von mir untersuchten APIs zu sagen, wie viele Objekte sich in einem S3-Bucket / Ordner (Präfix) befinden. Gibt es eine Möglichkeit, eine Zählung zu erhalten?
Antworten:
Es gibt keinen Weg, außer Sie
Listen Sie sie alle in Stapeln von 1000 auf (was langsam sein und Bandbreite verbrauchen kann - Amazon scheint die XML-Antworten niemals zu komprimieren), oder
Melden Sie sich bei S3 in Ihrem Konto an und gehen Sie zu Konto - Nutzung. Anscheinend weiß die Rechnungsabteilung genau, wie viele Objekte Sie gespeichert haben!
Das einfache Herunterladen der Liste aller Ihrer Objekte nimmt tatsächlich einige Zeit in Anspruch und kostet etwas Geld, wenn Sie 50 Millionen Objekte gespeichert haben.
Siehe auch diesen Thread zu StorageObjectCount - der in den Nutzungsdaten enthalten ist.
Eine S3-API, um zumindest die Grundlagen zu erhalten, selbst wenn sie Stunden alt wäre, wäre großartig.
aws s3 ls s3://mybucket/ --recursive | wc -l
oder
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
Hinweis: Der obige Cloudwatch-Befehl scheint für einige zu funktionieren, für andere nicht. Hier besprochen: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Sie können sich den Metrikabschnitt von Cloudwatch ansehen , um die ungefähre Anzahl der gespeicherten Objekte zu erhalten.
Ich habe ungefähr 50 Millionen Produkte und es dauerte mehr als eine Stunde, um mit zu zählen aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Es gibt einen --summarize
Schalter, der Informationen zur Bucket-Zusammenfassung enthält (dh Anzahl der Objekte, Gesamtgröße).
Hier ist die richtige Antwort mit AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Siehe die Dokumentation
Total Objects: 7235
Total Size: 475566411749
- so einfach.
Obwohl dies eine alte Frage ist und 2015 Feedback gegeben wurde, ist es jetzt viel einfacher, da S3 Web Console die Option "Größe abrufen" aktiviert hat:
Welches bietet die folgenden:
Wenn Sie das Befehlszeilentool s3cmd verwenden, können Sie eine rekursive Liste eines bestimmten Buckets abrufen und in eine Textdatei ausgeben.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Dann können Sie unter Linux ein wc -l für die Datei ausführen, um die Zeilen zu zählen (1 Zeile pro Objekt).
wc -l listing.txt
-r
Befehl in ist für --recursive
, daher sollte er auch für Unterordner funktionieren.
aws s3 ls
eher s3cmd als s3cmd verwenden, da es schneller ist. b.) Bei großen Eimern kann es lange dauern. Dauerte ca. 5 min für 1mil Dateien. c.) Siehe meine Antwort unten zur Verwendung von Cloudwatch.
Mit der S3-API gibt es jetzt eine einfache Lösung (verfügbar in der AWS-CLI):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
oder für einen bestimmten Ordner:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
(Version 1.2.9 von aws-cli), wenn ich es nur benutze --bucket my-bucket
und A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
wenn ich es benutze --bucket s3://my-bucket
. (Es existiert definitiv und hat 1000+ Dateien.)
Sie können AWS Cloudwatch-Metriken für s3 verwenden, um die genaue Anzahl für jeden Bucket anzuzeigen.
Gehen Sie zu AWS Billing, dann zu Berichten und dann zu AWS Usage-Berichten. Wählen Sie Amazon Simple Storage Service und dann Operation StandardStorage. Anschließend können Sie eine CSV-Datei herunterladen, die einen UsageType von StorageObjectCount enthält, in dem die Anzahl der Elemente für jeden Bucket aufgeführt ist.
Sie können die Gesamtzahl und den Verlauf leicht abrufen, wenn Sie zur Registerkarte "Verwaltung" der s3-Konsole gehen und dann auf "Metriken" klicken ... Screenshot der Registerkarte
NumberOfObjects (count/day)
Diagramm anzuzeigen? Es wäre besser, da es in direktem Zusammenhang mit der Frage steht. In Ihrem Screenshot zeigen Sie, BucketSizeBytes (bytes/day)
was zwar nützlich ist, aber nicht direkt mit dem Problem zusammenhängt.
Die API gibt die Liste in Schritten von 1000 zurück. Überprüfen Sie die IsTruncated-Eigenschaft, um festzustellen, ob noch weitere vorhanden sind. Wenn dies der Fall ist, müssen Sie einen weiteren Anruf tätigen und den letzten Schlüssel, den Sie erhalten haben, beim nächsten Anruf als Marker-Eigenschaft übergeben. Sie würden dann so weitermachen, bis IsTruncated falsch ist.
Weitere Informationen finden Sie in diesem Amazon-Dokument: Durchlaufen mehrseitiger Ergebnisse
Alter Thread, aber immer noch relevant, da ich nach der Antwort gesucht habe, bis ich das gerade herausgefunden habe. Ich wollte eine Dateizählung mit einem GUI-basierten Tool (dh ohne Code). Ich verwende bereits ein Tool namens 3Hub für Drag & Drop-Übertragungen von und nach S3. Ich wollte wissen, wie viele Dateien ich in einem bestimmten Bucket hatte (ich glaube nicht, dass die Abrechnung ihn nach Buckets aufteilt).
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
Ich hatte 20521 Dateien im Bucket und zählte die Dateien in weniger als einer Minute.
Ich habe das Python-Skript von scalablelogic.com verwendet (Hinzufügen der Zählprotokollierung). Hat super funktioniert.
#!/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
Führen Sie in s3cmd einfach den folgenden Befehl aus (auf einem Ubuntu-System):
s3cmd ls -r s3://mybucket | wc -l
Wenn Sie AWS CLI unter Windows verwenden, können Sie die Measure-Object
von PowerShell verwenden, um die Gesamtzahl der Dateien abzurufen, genau wie wc -l
unter * nix.
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
Ich hoffe es hilft.
Eine der einfachsten Möglichkeiten, die Anzahl der Objekte in s3 zu zählen, ist:
Schritt 1: Wählen Sie den Stammordner aus. Schritt 2: Klicken Sie auf Aktionen -> Löschen (natürlich nicht löschen). Schritt 3: Warten Sie einige Minuten. Aws zeigt Ihnen die Anzahl der Objekte und deren Gesamtgröße an.
UpVote, wenn Sie die Lösung finden.
Keine der APIs gibt Ihnen eine Zählung, da es dafür wirklich keine Amazon-spezifische API gibt. Sie müssen nur einen Listeninhalt ausführen und die Anzahl der zurückgegebenen Ergebnisse zählen.
Verwenden Sie in der Befehlszeile in AWS CLI ls plus --summarize
. Sie erhalten die Liste aller Ihrer Artikel und die Gesamtzahl der Dokumente in einem bestimmten Eimer. Ich habe dies nicht mit Eimern versucht, die Untereimer enthalten:
aws s3 ls "s3://MyBucket" --summarize
Das dauert etwas länger (das Auflisten meiner 16 + K-Dokumente dauerte ungefähr 4 Minuten), ist aber schneller als das gleichzeitige Zählen von 1K.
Wie wäre es mit S3-Speicherklassenanalyse - Sie erhalten APIs sowie auf der Konsole - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
3Hub wird eingestellt. Es gibt eine bessere Lösung: Sie können Transmit (nur Mac) verwenden. Dann stellen Sie einfach eine Verbindung zu Ihrem Bucket her und wählen Show Item Count
aus dem View
Menü.
Sie können den s3-Browser von http://s3browser.com/ herunterladen und installieren . Wenn Sie einen Bucket in der mittleren rechten Ecke auswählen, sehen Sie die Anzahl der Dateien im Bucket. Die angezeigte Größe ist jedoch in der aktuellen Version falsch.
Gubs
Am einfachsten ist es, die Entwicklerkonsole zu verwenden. Wenn Sie beispielsweise auf Chrome arbeiten, wählen Sie "Entwicklertools". Im Folgenden sehen Sie, ob Sie Übereinstimmungen finden und zählen oder durchführen können, z. B. 280-279 + 1 = 2
...
Ich fand das S3-Browser-Tool sehr benutzerfreundlich, es bietet Dateien und Ordner sowie die Gesamtzahl und Größe für jeden Ordner rekursiv
Download-Link: https://s3browser.com/download.aspx
Kann auch mit gsutil du
(Ja, einem Google Cloud-Tool) durchgeführt werden
gsutil du s3://mybucket/ | wc -l
Sie können diesen Befehl cli einfach ausführen, um die Gesamtanzahl der Dateien im Bucket oder in einem bestimmten Ordner abzurufen
Scannen Sie den gesamten Eimer
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
Mit diesem Befehl können Sie Details abrufen
aws s3api list-objects-v2 --bucket BUCKET_NAME
Scannen Sie einen bestimmten Ordner
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
Wenn Sie nach bestimmten Dateien suchen, beispielsweise nach .jpg
Bildern, können Sie Folgendes tun:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Im Folgenden erfahren Sie, wie Sie dies mit dem Java-Client tun können.
<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;
}
}
Hier ist die boto3-Version des oben eingebetteten Python-Skripts.
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: // Bucket-Name / Ordner-Präfix-falls-irgendein --rekursiv | wc -l