我一直通过S3Fox与Amazon S3进行交互,但似乎无法删除我的存储桶。我选择一个存储桶,点击删除,确认弹出窗口中的删除操作,然后...什么都没有发生。是否有其他工具可以使用?
我一直通过S3Fox与Amazon S3进行交互,但似乎无法删除我的存储桶。我选择一个存储桶,点击删除,确认弹出窗口中的删除操作,然后...什么都没有发生。是否有其他工具可以使用?
通过新的生命周期(过期)规则功能,现在可以一次性删除所有文件。您甚至可以从AWS控制台进行操作。
在AWS控制台中,只需右键单击存储桶名称,选择“属性”,然后在页面底部的选项卡行中选择“生命周期”和“添加规则”。创建一个生命周期规则,“前缀”字段留空(留空表示删除存储桶中的所有文件,或者您可以将其设置为“a”,以删除文件名以“a”开头的所有文件)。将“天数”字段设置为“1”。就这样,完成了。假设文件已经超过一天,它们应该全部被删除,然后您可以删除存储桶。
我第一次尝试这个功能,所以我还在等待文件被删除的速度有多快(不是瞬间的,但应该会在24小时内完成),以及我是否会因为一个删除命令或五千万个删除命令而产生费用...祈祷顺利!
aws cli
,一个单独的命令可以递归删除所有文件:aws s3 rm s3://bucket/folder/ --recursive
- Adrian Torrie请记住,S3桶在删除之前需要为空。好消息是,大多数第三方工具都自动化了这个过程。如果您在使用S3Fox时遇到问题,我建议尝试使用GUI的S3FM或命令行的S3Sync。亚马逊有一篇很棒的文章描述如何使用S3Sync。在设置变量后,关键命令是
./s3cmd.rb deleteall <your bucket name>
删除包含大量单个文件的桶往往会导致许多S3工具崩溃,因为它们尝试显示目录中所有文件的列表。您需要找到一种分批删除的方法。我发现用于此目的的最佳GUI工具是Bucket Explorer。它以1000个文件块的方式删除S3存储桶中的文件,并且在尝试打开像s3Fox和S3FM这样的大型存储桶时不会崩溃。
我还发现了一些可以用于此目的的脚本。我还没有尝试过这些脚本,但它们看起来非常简单。
RUBY
require 'aws/s3'
AWS::S3::Base.establish_connection!(
:access_key_id => 'your access key',
:secret_access_key => 'your secret key'
)
bucket = AWS::S3::Bucket.find('the bucket name')
while(!bucket.empty?)
begin
puts "Deleting objects in bucket"
bucket.objects.each do |object|
object.delete
puts "There are #{bucket.objects.size} objects left in the bucket"
end
puts "Done deleting objects"
rescue SocketError
puts "Had socket error"
end
end
PERL
#!/usr/bin/perl
use Net::Amazon::S3;
my $aws_access_key_id = 'your access key';
my $aws_secret_access_key = 'your secret access key';
my $increment = 50; # 50 at a time
my $bucket_name = 'bucket_name';
my $s3 = Net::Amazon::S3->new({aws_access_key_id => $aws_access_key_id, aws_secret_access_key => $aws_secret_access_key, retry => 1, });
my $bucket = $s3->bucket($bucket_name);
print "Incrementally deleting the contents of $bucket_name\n";
my $deleted = 1;
my $total_deleted = 0;
while ($deleted > 0) {
print "Loading up to $increment keys...\n";
$response = $bucket->list({'max-keys' => $increment, }) or die $s3->err . ": " . $s3->errstr . "\n";
$deleted = scalar(@{ $response->{keys} }) ;
$total_deleted += $deleted;
print "Deleting $deleted keys($total_deleted total)...\n";
foreach my $key ( @{ $response->{keys} } ) {
my $key_name = $key->{key};
$bucket->delete_key($key->{key}) or die $s3->err . ": " . $s3->errstr . "\n";
}
}
print "Deleting bucket...\n";
$bucket->delete_bucket or die $s3->err . ": " . $s3->errstr;
print "Done.\n";
来源:Tarkblog
希望这有所帮助!
最近版本的s3cmd有 --recursive 参数。
例如:
~/$ s3cmd rb --recursive s3://bucketwithfiles
SpaceBlock 还可以简单地删除 s3 存储桶 - 右键单击存储桶,选择删除,等待传输视图中的作业完成,就完成了。
这是我维护的免费开源的 Windows S3 前端,所以请不要介意我的自我推销。
如果您已经安装了 Ruby(和RubyGems),则可以通过以下命令安装aws-s3 gem:
gem install aws-s3
sudo gem install aws-s3
创建一个名为delete_bucket.rb
的文件:
require "rubygems" # optional
require "aws/s3"
AWS::S3::Base.establish_connection!(
:access_key_id => 'access_key_id',
:secret_access_key => 'secret_access_key')
AWS::S3::Bucket.delete("bucket_name", :force => true)
然后运行它:
ruby delete_bucket.rb
由于Bucket#delete
经常返回超时异常,因此我扩展了脚本:
require "rubygems" # optional
require "aws/s3"
AWS::S3::Base.establish_connection!(
:access_key_id => 'access_key_id',
:secret_access_key => 'secret_access_key')
while AWS::S3::Bucket.find("bucket_name")
begin
AWS::S3::Bucket.delete("bucket_name", :force => true)
rescue
end
end
如果您使用亚马逊的控制台,并且需要一次性清空存储桶:您可以浏览到您的存储桶,然后选择顶部的键,向下滚动并按住键盘上的shift键,然后单击底部的键。它将选择所有中间的内容,然后您可以右键单击并删除。
避免这个问题的一种技术是将所有对象放在存储桶中的“文件夹”中,这样您就可以只删除文件夹,然后继续删除存储桶。此外,可从http://s3tools.org获取的s3cmd工具可用于删除包含文件的存储桶:
s3cmd rb --force s3://bucket-name