我一直在通过S3Fox与Amazon S3进行交互,我似乎无法删除我的存储桶.我选择一个桶,点击删除,在弹出窗口中确认删除,然后......没有任何反应.我应该使用另一种工具吗?
最终可以使用新的生命周期(到期)规则功能一次性删除所有文件.您甚至可以从AWS控制台执行此操作.
只需右键单击AWS控制台中的存储桶名称,选择"属性",然后在页面底部的选项卡行中选择"生命周期"和"添加规则".创建生命周期规则,将"前缀"字段设置为空白(空白表示存储桶中的所有文件,或者您可以将其设置为"a"以删除名称以"a"开头的所有文件).将"天"字段设置为"1".而已.完成.假设文件超过一天,它们都应该被删除,然后您可以删除存储桶.
我只是第一次尝试这个,所以我还在等待文件被删除的速度有多快(它不是即时的,但可能是在24小时内发生)以及我是否需要支付一个删除命令或50万删除命令......手指交叉!
记住S3 Buckets在被删除之前需要为空.好消息是大多数第三方工具都会自动执行此过程.如果您遇到S3Fox问题,我建议您尝试使用S3FM for GUI或S3Sync作为命令行.亚马逊有一篇很棒的文章描述了如何使用S3Sync.设置变量后,键命令为
./s3cmd.rb deleteall
删除包含大量单个文件的存储桶往往会导致很多S3工具崩溃,因为它们会尝试显示目录中所有文件的列表.您需要找到批量删除的方法.我为此找到的最好的GUI工具是Bucket Explorer.它以1000个文件块的形式删除S3存储桶中的文件,并且在尝试打开s3Fox和S3FM等大型存储桶时不会崩溃.
我还发现了一些可用于此目的的脚本.我还没有尝试过这些脚本,但它们看起来非常简单.
红宝石
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
http://s3tools.org/kb/item5.htm
使用s3cmd:创建一个新的空目录s3cmd sync --delete-removed empty_directory s3:// yourbucket
这可能是S3Fox中的一个错误,因为它通常能够递归地删除项目.但是,我不确定我是否曾尝试立即删除整个存储桶及其内容.
Stu提到的JetS3t项目包括一个Java GUI小程序,您可以在浏览器中轻松运行以管理您的S3存储桶:Cockpit.与S3Fox相比,它有优点和缺点,但很有可能它可以帮助您处理麻烦的存储桶.虽然它会要求您先删除对象,然后删除存储桶.
免责声明:我是JetS3t和Cockpit的作者
SpaceBlock还可以简单地删除s3存储桶 - 右键单击存储桶,删除,等待作业在传输视图中完成,完成.
这是我维护的免费开源windows s3前端,所以无耻的插件警报等.