Skip to content

Instantly share code, notes, and snippets.

@jonasfj
Created September 20, 2016 22:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonasfj/0338cea0e92ade6b91bc22337bdf5e83 to your computer and use it in GitHub Desktop.
Save jonasfj/0338cea0e92ade6b91bc22337bdf5e83 to your computer and use it in GitHub Desktop.
let aws = require('aws-sdk');
let bucket = '<BUCKET TO DELETE>';
let deleted = 0;
setInterval(function() {
console.log("Deleted: " + deleted);
}, 1000);
let deleteFrom = async function(s3, prefix) {
let token = undefined;
while (true) {
let result = await s3.listObjectsV2({
Bucket: bucket,
ContinuationToken: token,
FetchOwner: false,
Prefix: prefix,
}).promise();
token = result.NextContinuationToken;
if (result.Contents.length === 0 && !token) {
console.log("Finished: " + prefix);
break;
}
await s3.deleteObjects({
Bucket: bucket,
Delete: {
Objects: result.Contents.map(e => { return {Key: e.Key}; }),
},
});
deleted += result.Contents.length;
}
};
(async () => {
let s3 = new aws.S3({region: 'us-west-2'});
let letters = []; // We assume all keys start with a-zA-Z0-9_- (otherwise run normal delete afterwards)
for(var i=65; i<=90; i++) {
letters.push(String.fromCharCode(i));
letters.push(String.fromCharCode(i).toLowerCase());
}
letters.push('-');
letters.push('_');
for(var i=0; i<=9; i++) {
letters.push('' + i);
}
console.log("deleting with " + letters.length + " parallel requests");
await Promise.all(letters.map(l => deleteFrom(s3, l)));
console.log("done deleting all - run again to be sure some may have failed");
})().catch(err => console.log(err));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment