Skip to content

Instantly share code, notes, and snippets.

@robvanderleek
Created September 5, 2018 22:47
Show Gist options
  • Save robvanderleek/3444c82619d28498fb378ee075b995d2 to your computer and use it in GitHub Desktop.
Save robvanderleek/3444c82619d28498fb378ee075b995d2 to your computer and use it in GitHub Desktop.
Prunes folder (all object versions and delete markers) on S3
#!/usr/bin/env python
# Prunes folder (all object versions and delete markers) on S3
import boto3
import sys
if len(sys.argv) != 3:
print('usage: {} <bucket> <prefix>'.format(sys.argv[0]))
sys.exit(1)
if sys.argv[2] == '/':
print('Prefix / not supported by policy')
sys.exit(1)
client = boto3.client('s3')
bucket = sys.argv[1]
prefix = sys.argv[2]
hasMore = True
keyMarker = None
while hasMore:
if keyMarker:
object_list = client.list_object_versions(Bucket=bucket,
MaxKeys=1000, Prefix=prefix, KeyMarker=keyMarker)
else:
object_list = client.list_object_versions(Bucket=bucket,
MaxKeys=1000, Prefix=prefix)
if 'Versions' in object_list:
objects = []
entries = object_list['Versions']
for e in entries:
print('Deleting: ' + e['Key'])
objects.append({'VersionId': e['VersionId'], 'Key': e['Key']})
client.delete_objects(Bucket=bucket, Delete={'Objects': objects})
if 'DeleteMarkers' in object_list:
objects = []
entries = object_list['DeleteMarkers']
for e in entries:
print('Deleting: ' + e['Key'])
objects.append({'VersionId': e['VersionId'], 'Key': e['Key']})
client.delete_objects(Bucket=bucket, Delete={'Objects': objects})
hasMore = object_list['IsTruncated']
keyMarker = object_list['KeyMarker']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment