Sé que este comando puede proporcionar el tamaño de todos los archivos en un cubo:
aws s3 ls mybucket --recursive --summarize --human-readablePero esto no tiene en cuenta el control de versiones .
Si ejecuto este comando:
aws s3 ls s3://mybucket/myfile --human-readableMostrará algo como "100 MiB", pero puede tener 10 versiones de este archivo que serán más como "1 GiB" en total.
Lo más cercano que tengo es obtener los tamaños de cada versión de un archivo determinado:
aws s3api list-object-versions --bucket mybucket --prefix "myfile" --query 'Versions[?StorageClass=`STANDARD`].Size' > /tmp/s3_myfile_version_sizesLuego tome la suma de todos los tamaños de versión.
Pero tendría que volver a ejecutar este comando para cada archivo en un depósito.
¿Hay una manera más fácil de hacer esto?
Puede ejecutar list-object-versions en el depósito como un todo:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' Usa jq para resumirlo:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' | jq addO, si necesita una salida legible por humanos:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' | jq add | numfmt --to=iec-i --suffix=BTambién puede agregar un prefijo en caso de que desee saber el tamaño de una "carpeta" dada y tal vez obtener también la cantidad de objetos de versión:
aws s3api list-object-versions --bucket my-bucket --prefix my-folder --query 'Versions[*].Size' | jq 'length|add' O puede usar el filtrado jq para escribir filtros más complejos, por ejemplo, que incluyan solo objetos no actuales:
aws s3api list-object-versions --bucket my-bucket --prefix my-folder | jq '[.Versions[]|select(.IsLatest == false)|.Size] | length,add' Si jq no está disponible, el uso de la opción --output text de salida desafortunadamente da como resultado valores separados por tabuladores, así que aquí hay un truco para forzarlo a separar líneas y luego sumar el total :
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].[Size,Size]' --output text | awk '{s+=$1} END {printf "%.0f", s}'Si tiene una gran cantidad de objetos, podría ser mejor utilizar los datos proporcionados por el inventario de almacenamiento de Amazon S3 :
El inventario de Amazon S3 proporciona una salida de archivo sin formato de valores separados por comas (CSV) de sus objetos y sus metadatos correspondientes a diario o semanalmente para un depósito de S3 o un prefijo compartido (es decir, objetos que tienen nombres que comienzan con un común cuerda).
Use CloudWatch, dará resultado con todas las versiones.