Usage
./s3_remove_delete_markers_recursive.sh <bucket_name> <prefix>
Dependencies
#!/bin/bash | |
bucket=$1 | |
prefix=$2 | |
set -e | |
echo "Removing all latest delete markers in $bucket with prefix $prefix" | |
#versions=`aws s3api list-object-versions --bucket $bucket | jq '.Versions | .[] | select(.IsLatest | not)'` | |
latest_delete_markers=`aws s3api list-object-versions --bucket $bucket --prefix "$prefix" | jq '.DeleteMarkers | .[] | select(.IsLatest)'` | |
# echo "latest delete markers:" | |
# echo "$latest_delete_markers" | |
# echo "removing delete markers" | |
for marker in $(echo "${latest_delete_markers}" | jq -r '@base64'); do | |
marker=$(echo ${marker} | base64 --decode) | |
# echo "marker:" | |
# echo "$marker" | |
key=`echo $marker | jq -r .Key` | |
versionId=`echo $marker | jq -r .VersionId ` | |
printf "Removing delete marker $key $versionId ... " | |
aws s3api delete-object --bucket $bucket --key "$key" --version-id $versionId > /dev/null | |
printf "✓\n" | |
# echo $cmd | |
# $cmd | |
done |