Reputation: 27852
I have the following hierarchy in my s3 bucket
bucket_name/folder1/folder2/file1
bucket_name/folder1/folder2/file1
I am able to delete all the files within folder2, but that leaves the bucket with empty folders as folder1/folder2.
What is the appropriate way of deleting those folders?
Here is what I do to delete a particular file:
Where s3
is my Amazon s3 instance:
s3.buckets[my_bucket_name].objects[path].delete
Ideally I would like to delete the folders an all the contents.
Upvotes: 14
Views: 35461
Reputation: 503
You can use aws-cli to delete a folder:
aws s3 rm s3://mybucket/ --recursive
In order to check what the delete operation will delete, you can set --dryrun
flag :
aws s3 rm s3://mybucket/ --recursive --dryrun
Upvotes: 14
Reputation: 422
function emptyBucket(bucket, folderName, callback) {
var params = {
Bucket: bucket,
Prefix: folderName+ '/'
};
s3.listObjects(params, function (err, data) {
if (err) return callback(err);
if (data.Contents.length == 0) callback();
params = { Bucket: bucket };
params.Delete = { Objects: [] };
data.Contents.forEach(function (content) {
params.Delete.Objects.push({ Key: content.Key });
});
s3.deleteObjects(params, function (err, data) {
if (err) return callback(err);
if (data.IsTruncated) {
emptyBucket(bucket, callback);
} else {
callback();
}
});
});
}
Upvotes: 0
Reputation: 19938
client = Aws::S3::Client.new(region: '...',
access_key_id: '...',
secret_access_key: '...')
bucket = 'acme-test'
folder_name = 'my_folder/'
# delete all objects in folder *and folder*
client.list_objects(bucket: bucket, prefix: folder_name).contents.each do |obj|
client.delete_object(bucket: bucket, key: obj.key)
end
Upvotes: 1
Reputation: 160
http://aws.amazon.com/code/1710
orr Command line tool to move/modify files/folders in Amazon S3
where a similar question was asked
Upvotes: -1