Skip to content

Instantly share code, notes, and snippets.

@ddnn55
Forked from pecigonzalo/delete_all_object_versions.sh
Last active January 26, 2021 08:32
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ddnn55/56ed431c4c4bb10e2923e6aee2688169 to your computer and use it in GitHub Desktop.
Save ddnn55/56ed431c4c4bb10e2923e6aee2688169 to your computer and use it in GitHub Desktop.
Remove all latest delete markers under an s3 prefix, thereby "restoring a deleted directory"

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment