Hommer Smith
Hommer Smith

Reputation: 27852

How to delete a folder in s3?

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

Answers (4)

Parul Singh
Parul Singh

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

Syed Kashif
Syed Kashif

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

Kris
Kris

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

Related Questions