A meno che non mi manchi qualcosa, sembra che nessuna delle API che ho visto ti dirà quanti oggetti si trovano in un bucket / cartella S3 (prefisso). C'è un modo per ottenere un conteggio?
A meno che non mi manchi qualcosa, sembra che nessuna delle API che ho visto ti dirà quanti oggetti si trovano in un bucket / cartella S3 (prefisso). C'è un modo per ottenere un conteggio?
Risposte:
Non c'è modo, a meno che tu
elencarli tutti in batch di 1000 (che può essere lento e risucchiare la larghezza di banda - Amazon sembra non comprimere mai le risposte XML), o
accedi al tuo account su S3 e vai Account - Utilizzo. Sembra che il reparto fatturazione sappia esattamente quanti oggetti hai archiviato!
Il semplice download dell'elenco di tutti i tuoi oggetti richiederà del tempo e un po 'di denaro se hai 50 milioni di oggetti memorizzati.
Vedi anche questo thread su StorageObjectCount - che si trova nei dati di utilizzo.
Un'API S3 per ottenere almeno le basi, anche se aveva ore, sarebbe ottima.
aws s3 ls s3://mybucket/ --recursive | wc -l
o
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
Nota: il comando cloudwatch sopra sembra funzionare per alcuni mentre non per altri. Discusso qui: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Puoi guardare la sezione metrica di cloudwatch per ottenere circa il numero di oggetti memorizzati.
Ho circa 50 milioni di prodotti e ci sono voluti più di un'ora per contare aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
C'è un --summarize
interruttore che include le informazioni di riepilogo del bucket (cioè numero di oggetti, dimensione totale).
Ecco la risposta corretta utilizzando AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Vedi la documentazione
Total Objects: 7235
Total Size: 475566411749
- così facile.
Anche se questa è una vecchia domanda e il feedback è stato fornito nel 2015, in questo momento è molto più semplice, poiché S3 Web Console ha abilitato un'opzione "Ottieni dimensioni":
Che fornisce quanto segue:
Se si utilizza lo strumento da riga di comando s3cmd , è possibile ottenere un elenco ricorsivo di un determinato bucket, inoltrandolo in un file di testo.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Quindi in Linux è possibile eseguire un wc -l sul file per contare le righe (1 riga per oggetto).
wc -l listing.txt
-r
comando in è per --recursive
, quindi dovrebbe funzionare anche per le sottocartelle.
aws s3 ls
piuttosto che s3cmd perché è più veloce. b.) Per secchi di grandi dimensioni può richiedere molto tempo. Ci sono voluti circa 5 minuti per i file 1mil. c.) Vedi la mia risposta di seguito sull'uso di cloudwatch.
Ora esiste una soluzione semplice con l'API S3 (disponibile nel cli AWS):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
o per una cartella specifica:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
(versione 1.2.9 di aws-cli), quando si usa --bucket my-bucket
e A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
quando si usa --bucket s3://my-bucket
. (Esiste sicuramente, e ha oltre 1000 file.)
Puoi utilizzare le metriche di AWS cloudwatch per s3 per vedere il conteggio esatto per ogni bucket.
Vai a Fatturazione AWS, quindi rapporti, quindi Rapporti utilizzo AWS. Seleziona Amazon Simple Storage Service, quindi Operation StandardStorage. Quindi è possibile scaricare un file CSV che include un UsageType di StorageObjectCount che elenca il conteggio degli articoli per ciascun bucket.
Puoi facilmente ottenere il conteggio totale e la cronologia se vai alla scheda "Gestione" della console s3 e fai clic su "Metriche" ... Schermata della scheda
NumberOfObjects (count/day)
grafico? Sarebbe meglio poiché è direttamente correlato alla domanda. Nel tuo screenshot, stai mostrando ciò BucketSizeBytes (bytes/day)
che, sebbene utile, non è direttamente correlato al problema.
L'API restituirà l'elenco con incrementi di 1000. Controllare la proprietà IsTruncated per vedere se ce ne sono ancora. In tal caso, è necessario effettuare un'altra chiamata e passare l'ultimo tasto ottenuto come proprietà Marker nella chiamata successiva. Quindi continueresti a eseguire il ciclo in questo modo fino a quando IsTruncated è falso.
Vedi questo documento di Amazon per maggiori informazioni: Scorrere i risultati su più pagine
Vecchio thread, ma ancora pertinente mentre cercavo la risposta fino a quando non ho appena capito. Volevo un conteggio dei file utilizzando uno strumento basato sulla GUI (cioè senza codice). Mi capita di usare già uno strumento chiamato 3Hub per i trasferimenti drag & drop da e verso S3. Volevo sapere quanti file avevo in un determinato bucket (non credo che la fatturazione li rompa per secchi).
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
Avevo 20521 file nel bucket e il conteggio dei file è stato effettuato in meno di un minuto.
Ho usato lo script Python da scalablelogic.com (aggiungendo nella registrazione dei conteggi). Ha funzionato alla grande.
#!/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
In s3cmd, esegui semplicemente il seguente comando (su un sistema Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Se si utilizza l'interfaccia della riga di comando di AWS su Windows, è possibile utilizzare Measure-Object
da PowerShell per ottenere il conteggio totale dei file, proprio come wc -l
su * nix.
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
Spero che sia d'aiuto.
Uno dei modi più semplici per contare il numero di oggetti in s3 è:
Passaggio 1: selezionare la cartella principale Passaggio 2: fare clic su Azioni -> Elimina (ovviamente, fare attenzione a non eliminarlo) Passaggio 3: attendere qualche minuto per visualizzare il numero di oggetti e le dimensioni totali.
Voto positivo se trovi la soluzione.
Nessuna delle API ti darà un conto perché in realtà non esiste alcuna API specifica di Amazon per farlo. Devi solo eseguire un elenco di contenuti e contare il numero di risultati che vengono restituiti.
Dalla riga di comando nell'interfaccia della riga di comando di AWS, utilizzare ls plus --summarize
. Ti fornirà l'elenco di tutti i tuoi articoli e il numero totale di documenti in un particolare bucket. Non ho provato questo con secchi contenenti sotto-secchi:
aws s3 ls "s3://MyBucket" --summarize
Richiede un po 'di tempo (ci sono voluti elencare i miei documenti 16 + K per circa 4 minuti), ma è più veloce che contare 1K alla volta.
Che ne dici di analisi della classe di archiviazione S3 - Ottieni API e su console - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
3Hub è interrotto. C'è una soluzione migliore, puoi usare Transmit (solo Mac), quindi ti basta connetterti al tuo bucket e scegliere Show Item Count
dal View
menu.
Puoi scaricare e installare il browser s3 da http://s3browser.com/ . Quando selezioni un bucket nell'angolo centrale destro puoi vedere il numero di file nel bucket. Tuttavia, la dimensione visualizzata non è corretta nella versione corrente.
Gübs
Il modo più semplice è utilizzare la console per sviluppatori, ad esempio, se sei su Chrome, scegli Strumenti per sviluppatori e puoi vedere quanto segue, puoi trovare e contare o fare una partita, come 280-279 + 1 = 2
...
Ho trovato lo strumento del browser S3 molto utente, fornisce file e cartelle e il conteggio totale e le dimensioni per qualsiasi cartella in modo ricorsivo
Link per il download: https://s3browser.com/download.aspx
Può anche essere fatto con gsutil du
(Sì, uno strumento Google Cloud)
gsutil du s3://mybucket/ | wc -l
Puoi semplicemente eseguire questo comando cli per ottenere il conteggio totale dei file nel bucket o in una cartella specifica
Scansione intero secchio
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
puoi usare questo comando per entrare nei dettagli
aws s3api list-objects-v2 --bucket BUCKET_NAME
Scansiona una cartella specifica
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
Se stai cercando file specifici, diciamo .jpg
immagini, puoi fare quanto segue:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Di seguito è riportato come è possibile farlo utilizzando il client 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;
}
}
Ecco la versione boto3 dello script Python incorporato sopra.
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 / folder-prefix-if-any --recursive | wc -l