A menos que me falte algo, parece que ninguna de las API que he visto le dirá cuántos objetos hay en un bucket / carpeta S3 (prefijo). ¿Hay alguna forma de contar?
A menos que me falte algo, parece que ninguna de las API que he visto le dirá cuántos objetos hay en un bucket / carpeta S3 (prefijo). ¿Hay alguna forma de contar?
Respuestas:
No hay manera, a menos que usted
enumerarlos todos en lotes de 1000 (que pueden ser lentos y absorber el ancho de banda; parece que Amazon nunca comprime las respuestas XML), o
inicie sesión en su cuenta en S3 y vaya a Cuenta - Uso. ¡Parece que el departamento de facturación sabe exactamente cuántos objetos ha almacenado!
Simplemente descargar la lista de todos sus objetos llevará algún tiempo y costará algo de dinero si tiene 50 millones de objetos almacenados.
Consulte también este hilo sobre StorageObjectCount , que se encuentra en los datos de uso.
Una API S3 para obtener al menos lo básico, incluso si tenía horas de antigüedad, sería genial.
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: El comando anterior de cloudwatch parece funcionar para algunos mientras que no para otros. Discutido aquí: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Puede mirar la sección métrica de cloudwatch para obtener aproximadamente la cantidad de objetos almacenados.
Tengo aproximadamente 50 millones de productos y me llevó más de una hora contarlos usando aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Hay un --summarize
interruptor que incluye información de resumen del depósito (es decir, número de objetos, tamaño total).
Aquí está la respuesta correcta usando AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Ver la documentación
Total Objects: 7235
Total Size: 475566411749
muy fácil.
Aunque esta es una pregunta antigua, y los comentarios se proporcionaron en 2015, ahora es mucho más simple, ya que S3 Web Console ha habilitado la opción "Obtener tamaño":
Que proporciona lo siguiente:
Si utiliza la herramienta de línea de comandos s3cmd , puede obtener una lista recursiva de un depósito en particular y enviarlo a un archivo de texto.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Luego, en Linux, puede ejecutar un wc -l en el archivo para contar las líneas (1 línea por objeto).
wc -l listing.txt
-r
comando en es para --recursive
, por lo que también debería funcionar para subcarpetas.
aws s3 ls
lugar de s3cmd porque es más rápido. b.) Para cubos grandes puede llevar mucho tiempo. Tomó alrededor de 5 minutos para archivos 1mil. c.) Vea mi respuesta a continuación sobre el uso de Cloudwatch.
Ahora hay una solución fácil con la API S3 (disponible en el cli de AWS):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
o para una carpeta específica:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
(versión 1.2.9 de aws-cli), cuando solo uso --bucket my-bucket
y A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
cuando uso --bucket s3://my-bucket
. (Definitivamente existe, y tiene más de 1000 archivos).
Vaya a Facturación de AWS, luego informes, luego informes de uso de AWS. Seleccione Amazon Simple Storage Service, luego Operation StandardStorage. Luego puede descargar un archivo CSV que incluye un UsageType de StorageObjectCount que enumera el recuento de elementos para cada depósito.
Puede obtener fácilmente el recuento total y el historial si va a la pestaña "Administración" de la consola s3 y luego hace clic en "Métricas" ... Captura de pantalla de la pestaña
NumberOfObjects (count/day)
gráfico? Sería mejor ya que está directamente relacionado con la pregunta. En su captura de pantalla, está mostrando lo BucketSizeBytes (bytes/day)
que, si bien es útil, no está directamente relacionado con el problema.
La API devolverá la lista en incrementos de 1000. Verifique la propiedad IsTruncated para ver si aún hay más. Si es así, debe realizar otra llamada y pasar la última clave que obtuvo como propiedad de marcador en la próxima llamada. Luego continuaría haciendo un bucle como este hasta que IsTruncated sea falso.
Consulte este documento de Amazon para obtener más información: iterando a través de resultados de varias páginas
Hilo antiguo, pero aún relevante ya que estaba buscando la respuesta hasta que lo descubrí. Quería un recuento de archivos usando una herramienta basada en GUI (es decir, sin código). Ya uso una herramienta llamada 3Hub para las transferencias de arrastrar y soltar hacia y desde S3. Quería saber cuántos archivos tenía en un depósito en particular (no creo que la facturación lo desglose en depósitos).
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
Tenía 20521 archivos en el cubo e hice el recuento de archivos en menos de un minuto.
Usé el script de python de scalablelogic.com (agregando el registro de conteo). Funcionó muy bien.
#!/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
En s3cmd, simplemente ejecute el siguiente comando (en un sistema Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Una de las formas más simples de contar el número de objetos en s3 es:
Paso 1: Seleccione la carpeta raíz Paso 2: Haga clic en Acciones -> Eliminar (Obviamente, tenga cuidado de no eliminarlo) Paso 3: Espere unos minutos, aws le mostrará la cantidad de objetos y su tamaño total.
Vota si encuentras la solución.
Ninguna de las API le dará un recuento porque realmente no hay ninguna API específica de Amazon para hacer eso. Solo tiene que ejecutar una lista de contenidos y contar el número de resultados que se devuelven.
Desde la línea de comandos en AWS CLI, use ls plus --summarize
. Le dará la lista de todos sus artículos y el número total de documentos en un cubo en particular. No he intentado esto con cubos que contienen subgrupos:
aws s3 ls "s3://MyBucket" --summarize
Me tomó un poco de tiempo (me tomó listar mis documentos de 16 + K aproximadamente 4 minutos), pero es más rápido que contar 1K a la vez.
¿Qué hay de la analítica de clase de almacenamiento S3? Obtiene API, así como en la consola: https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
3Hub se suspende. Hay una mejor solución, puede usar Transmitir (solo Mac), luego simplemente conectarse a su bucket y elegir Show Item Count
del View
menú.
Puede descargar e instalar el navegador s3 desde http://s3browser.com/ . Cuando selecciona un depósito en la esquina central derecha, puede ver la cantidad de archivos en el depósito. Pero, el tamaño que muestra es incorrecto en la versión actual.
Gubs
La forma más fácil es usar la consola de desarrollador, por ejemplo, si está en Chrome, elija Herramientas de desarrollador, y puede ver lo siguiente, puede buscar y contar o hacer alguna coincidencia, como 280-279 + 1 = 2
...
La herramienta de navegador S3 me pareció muy útil, proporciona archivos y carpetas y el recuento total, así como el tamaño de cualquier carpeta de forma recursiva
Enlace de descarga: https://s3browser.com/download.aspx
También se puede hacer con gsutil du
(Sí, una herramienta de Google Cloud)
gsutil du s3://mybucket/ | wc -l
Puede ejecutar este comando cli para obtener el recuento total de archivos en el depósito o en una carpeta específica
Escanear todo el cubo
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
puedes usar este comando para obtener detalles
aws s3api list-objects-v2 --bucket BUCKET_NAME
Escanear una carpeta específica
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 está buscando archivos específicos, digamos .jpg
imágenes, puede hacer lo siguiente:
aws s3 ls s3://your_bucket | grep jpg | wc -l
A continuación se muestra cómo puede hacerlo utilizando el cliente 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;
}
}
Aquí está la versión boto3 del script python incrustado anteriormente.
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: // nombre-cubo / carpeta-prefijo-si-alguno - recursivo | wc -l