diff --git a/lib/s3-functions b/lib/s3-functions index cfdabaa1..3a67a3ba 100644 --- a/lib/s3-functions +++ b/lib/s3-functions @@ -112,7 +112,39 @@ bucket-remove-force() { local bucket for bucket in $buckets; do aws s3 rb --force "s3://${bucket}" + if [[ $? -ne 0 ]] + then + echo "Remove bucket failed, trying to delete object versions first (this may take a while)..." + bucket-remove-all-objects-versions ${bucket} + aws s3 rb --force "s3://${bucket}" + fi done fi } +bucket-remove-all-objects-versions() { + + local buckets=$(skim-stdin "$@") + [[ -z "$buckets" ]] && __bma_usage "bucket [bucket]" && return 1 + + local bucket + for bucket in $buckets; do + echo "Removing all versions from $bucket" + + versions=`aws s3api list-object-versions --bucket $bucket |jq '.Versions'` + let count=`echo $versions |jq 'length'`-1 + + if [ $count -gt -1 ]; then + echo "removing files" + for i in $(seq 0 $count); do + echo -ne "${i} out of ${count}\r" + key=`echo $versions | jq .[$i].Key |sed -e 's/\"//g'` + versionId=`echo $versions | jq .[$i].VersionId |sed -e 's/\"//g'` + aws s3api delete-object --bucket $bucket --key '$key' --version-id $versionId > /dev/null + done + echo -ne '\n' + fi + + done + +}