À moins que je ne manque quelque chose, il semble qu'aucune des API que j'ai examinées ne vous dira combien d'objets se trouvent dans un compartiment / dossier S3 (préfixe). Existe-t-il un moyen d'obtenir un décompte?
À moins que je ne manque quelque chose, il semble qu'aucune des API que j'ai examinées ne vous dira combien d'objets se trouvent dans un compartiment / dossier S3 (préfixe). Existe-t-il un moyen d'obtenir un décompte?
Réponses:
Il n'y a aucun moyen, sauf si vous
listez-les tous par lots de 1000 (ce qui peut être lent et sucer la bande passante - Amazon semble ne jamais compresser les réponses XML), ou
connectez-vous à votre compte sur S3 et accédez à Compte - Utilisation. Il semble que le service de facturation sache exactement combien d'objets vous avez stockés!
Le simple téléchargement de la liste de tous vos objets prendra en fait du temps et coûtera de l'argent si vous avez 50 millions d'objets stockés.
Voir également ce fil sur StorageObjectCount - qui se trouve dans les données d'utilisation.
Une API S3 pour obtenir au moins les bases, même si elle avait des heures, serait géniale.
aws s3 ls s3://mybucket/ --recursive | wc -l
ou
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
Remarque: la commande cloudwatch ci-dessus semble fonctionner pour certains, mais pas pour d'autres. Discuté ici: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Vous pouvez consulter la section métrique de cloudwatch pour obtenir un nombre approximatif d'objets stockés.
J'ai environ 50 millions de produits et il a fallu plus d'une heure pour compter en utilisant aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Il existe un --summarize
commutateur qui inclut des informations récapitulatives sur le compartiment (c'est-à-dire le nombre d'objets, la taille totale).
Voici la bonne réponse en utilisant AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Voir la documentation
Total Objects: 7235
Total Size: 475566411749
- si facile.
Bien que cette question soit ancienne et que des commentaires aient été fournis en 2015, pour le moment, c'est beaucoup plus simple, car la console Web S3 a activé une option "Obtenir la taille":
Qui fournit ce qui suit:
Si vous utilisez l' outil de ligne de commande s3cmd , vous pouvez obtenir une liste récursive d'un compartiment particulier, en la générant dans un fichier texte.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Ensuite, sous Linux, vous pouvez exécuter un wc -l sur le fichier pour compter les lignes (1 ligne par objet).
wc -l listing.txt
-r
commande dans la commande est pour --recursive
, donc cela devrait également fonctionner pour les sous-dossiers.
aws s3 ls
plutôt que s3cmd car c'est plus rapide. b.) Pour les grands seaux, cela peut prendre beaucoup de temps. Il a fallu environ 5 minutes pour les fichiers de 1 mil. c.) Voir ma réponse ci-dessous sur l'utilisation de cloudwatch.
Il existe maintenant une solution simple avec l'API S3 (disponible dans AWS cli):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
ou pour un dossier spécifique:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
J'obtiens (version 1.2.9 de aws-cli), lorsque je suis juste en train d'utiliser --bucket my-bucket
et A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
quand je l' utilise --bucket s3://my-bucket
. (Il existe définitivement et contient plus de 1000 fichiers.)
Vous pouvez utiliser les métriques AWS cloudwatch pour s3 pour voir le nombre exact de chaque compartiment.
Accédez à AWS Billing, puis aux rapports, puis aux rapports d'utilisation AWS. Sélectionnez Amazon Simple Storage Service, puis Operation StandardStorage. Ensuite, vous pouvez télécharger un fichier CSV qui inclut un UsageType de StorageObjectCount qui répertorie le nombre d'éléments pour chaque compartiment.
Vous pouvez facilement obtenir le décompte total et l'historique si vous allez dans l'onglet "Gestion" de la console s3 puis cliquez sur "Métriques" ... Capture d'écran de l'onglet
NumberOfObjects (count/day)
graphique? Ce serait mieux puisque c'est directement lié à la question. Dans votre capture d'écran, vous montrez ce BucketSizeBytes (bytes/day)
qui, bien qu'utile, n'est pas directement lié au problème.
L'API renverra la liste par incréments de 1000. Vérifiez la propriété IsTruncated pour voir s'il y en a encore plus. Si tel est le cas, vous devez effectuer un autre appel et passer la dernière clé que vous avez obtenue comme propriété Marker lors du prochain appel. Vous continueriez alors à boucler comme ceci jusqu'à ce que IsTruncated soit faux.
Voir ce document Amazon pour plus d'informations: Itérer des résultats multi-pages
Ancien fil, mais toujours pertinent car je cherchais la réponse jusqu'à ce que je viens de comprendre cela. Je voulais un nombre de fichiers en utilisant un outil basé sur l'interface graphique (c'est-à-dire pas de code). Il se trouve que j'utilise déjà un outil appelé 3Hub pour les transferts par glisser-déposer vers et depuis S3. Je voulais savoir combien de fichiers j'avais dans un compartiment particulier (je ne pense pas que la facturation le décompose en compartiments).
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
J'avais 20521 fichiers dans le seau et j'ai fait le décompte des fichiers en moins d'une minute.
J'ai utilisé le script python de scalablelogic.com (en ajoutant la journalisation du comptage). A très bien fonctionné.
#!/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
Dans s3cmd, exécutez simplement la commande suivante (sur un système Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Si vous utilisez l'AWS CLI sous Windows, vous pouvez utiliser le Measure-Object
de PowerShell pour obtenir le nombre total de fichiers, comme wc -l
sur * nix.
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
J'espère que ça aide.
L'un des moyens les plus simples de compter le nombre d'objets dans s3 est:
Étape 1: Sélectionnez le dossier racine Étape 2: Cliquez sur Actions -> Supprimer (évidemment, faites attention à ne pas le supprimer) Étape 3: Attendez quelques minutes aws vous montrera le nombre d'objets et sa taille totale.
UpVote si vous trouvez la solution.
Aucune des API ne vous donnera un décompte car il n'y a vraiment pas d'API spécifique à Amazon pour le faire. Vous devez simplement exécuter une liste-contenu et compter le nombre de résultats renvoyés.
À partir de la ligne de commande dans AWS CLI, utilisez ls plus --summarize
. Il vous donnera la liste de tous vos éléments et le nombre total de documents dans un compartiment particulier. Je n'ai pas essayé cela avec des seaux contenant des sous-seaux:
aws s3 ls "s3://MyBucket" --summarize
Cela prend un peu de temps (il a fallu environ 4 minutes pour lister mes documents 16 + K), mais c'est plus rapide que de compter 1K à la fois.
Qu'en est-il de l'analyse de classe de stockage S3 - Vous obtenez des API ainsi que sur la console - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
3Hub est interrompu. Il existe une meilleure solution, vous pouvez utiliser Transmit (Mac uniquement), puis il vous suffit de vous connecter à votre bucket et de choisir Show Item Count
dans le View
menu.
Vous pouvez télécharger et installer le navigateur s3 à partir de http://s3browser.com/ . Lorsque vous sélectionnez un compartiment dans le coin central droit, vous pouvez voir le nombre de fichiers dans le compartiment. Mais la taille affichée est incorrecte dans la version actuelle.
Gubs
Le moyen le plus simple est d'utiliser la console développeur, par exemple, si vous êtes sur chrome, choisissez Outils de développement, et vous pouvez voir ce qui suit, vous pouvez soit trouver et compter, soit faire une correspondance, comme 280-279 + 1 = 2
...
J'ai trouvé l'outil de navigateur S3 très utilisateur, il fournit des fichiers et des dossiers et le nombre total ainsi que la taille de tout dossier de manière récursive
Lien de téléchargement: https://s3browser.com/download.aspx
Peut également être fait avec gsutil du
(Oui, un outil Google Cloud)
gsutil du s3://mybucket/ | wc -l
Vous pouvez simplement exécuter cette commande cli pour obtenir le nombre total de fichiers dans le compartiment ou dans un dossier spécifique
Analyser le seau entier
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
vous pouvez utiliser cette commande pour obtenir des détails
aws s3api list-objects-v2 --bucket BUCKET_NAME
Analyser un dossier spécifique
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
Si vous recherchez des fichiers spécifiques, disons des .jpg
images, vous pouvez effectuer les opérations suivantes:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Voici comment vous pouvez le faire en utilisant le 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;
}
}
Voici la version boto3 du script python intégré ci-dessus.
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: // nom-compartiment / préfixe-dossier-s'il-y-a-un --recursive | wc -l