2017-03-31 1 views
1

Ich weiß, dass dieser Befehl die Größe aller Dateien in einem Eimer zur Verfügung stellen kann:Wie bekomme ich die Größe aller Dateien in einem S3-Bucket mit Versionierung?

aws s3 ls mybucket --recursive --summarize --human-readable 

Aber das erklärt nicht versioning.

Wenn ich diesen Befehl ausführen:

aws s3 ls s3://mybucket/myfile --human-readable 

Es wird so etwas wie „100 MiB“ zeigen, aber es 10 Versionen dieser Datei haben kann, das mehr sein wird, wie „1 GiB“ total.

Die nächstgelegene ich habe, ist die Größe jeder Version einer bestimmten Datei bekommen:

aws s3api list-object-versions --bucket mybucket --prefix "myfile" --query 'Versions[?StorageClass=`STANDARD`].Size' > /tmp/s3_myfile_version_sizes 

Dann ist die Summe aller Version Größen nehmen.

Aber ich würde diesen Befehl für jede Datei in einem Bucket erneut ausführen müssen.

Gibt es eine einfachere Möglichkeit, dies zu tun?

Antwort

0

Sie können list-object-versions auf dem Eimer als Ganzes laufen:

aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' 

Mit der --output text Option führt leider in Tab-separated values, also hier ist ein Hack, um es zu zwingen Linien zu trennen und dann add bis die Gesamt:

aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].[Size,Size]' --output text | awk '{s+=$1} END {printf "%.0f", s}' 

Wenn Sie eine große Anzahl von Objekten haben, könnte es besser sein, Daten von denzu nutzen:

Amazon S3 Inventar stellt eine durch Kommata getrennte Werte (CSV) Flachdateiausgabe der Objekte und ihre entsprechenden Metadaten auf einer täglichen oder wöchentlichen Basis für eine S3 Eimer oder einem gemeinsamen Präfix (dh Objekte mit Namen, die mit einer gemeinsamen Zeichenfolge beginnen).

Verwandte Themen