我在S3以下文件夹结构。 有没有一种方法来去除递归特定的文件夹下的所有文件(比如foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
我在S3以下文件夹结构。 有没有一种方法来去除递归特定的文件夹下的所有文件(比如foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
With the latest aws-cli python command line tools, to recursively delete all the files under a folder in a bucket is just:
aws s3 rm --recursive s3://your_bucket_name/foo/
Or delete everything under the bucket:
aws s3 rm --recursive s3://your_bucket_name
If what you want is to actually delete the bucket, there is one-step shortcut:
aws s3 rb --force s3://your_bucket_name
which will remove the contents in that bucket recursively then delete the bucket.
Note: the s3://
protocol prefix is required for these commands to work
过去,这需要为每个键(文件)专用的API调用,但由于引入了极大的简化亚马逊S3 -多目标删除在2011年12月:
亚马逊S3的新多目标删除使您能够从S3斗删除多达1000个对象有一个请求的能力。
见我的回答相关问题使用通配符使用PHP API从S3删除为了了解更多关于PHP这一点,各例(在AWS SDK的PHP支持这一点,因为1.4.8版本 )。
大部分AWS客户端库都同时推出了这一功能的一种方式或其他,如专门的支持:
你可以用出色的做到这一点博托 Python接口AWS大致如下(未经测试,从我的头顶):
import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket("bucketname")
bucketListResultSet = bucket.list(prefix="foo/bar")
result = bucket.delete_keys([key.name for key in bucketListResultSet])
这是可用,因为1.24版本中的AWS SDK为Ruby和发行说明提供了一个例子,以及:
bucket = AWS::S3.new.buckets['mybucket']
# delete a list of objects by keys, objects are deleted in batches of 1k per
# request. Accepts strings, AWS::S3::S3Object, AWS::S3::ObectVersion and
# hashes with :key and :version_id
bucket.objects.delete('key1', 'key2', 'key3', ...)
# delete all of the objects in a bucket (optionally with a common prefix as shown)
bucket.objects.with_prefix('2009/').delete_all
# conditional delete, loads and deletes objects in batches of 1k, only
# deleting those that return true from the block
bucket.objects.delete_if{|object| object.key =~ /\.pdf$/ }
# empty the bucket and then delete the bucket, objects are deleted in batches of 1k
bucket.delete!
要么:
AWS::S3::Bucket.delete('your_bucket', :force => true)
你也可以考虑使用亚马逊S3的生命周期来创建带有前缀的文件过期foo/bar1
。
打开浏览器S3控制台,点击水桶。 然后,然后单击属性,生命周期。
创建带有前缀的所有文件的过期规则foo/bar1
和日期设置为1天,因为文件被创建。
保存并全部匹配的文件将在24小时内消失。
只是不要忘记删除的规则大功告成了!
没有API调用,没有第三方库,应用程序或脚本。
我只是删除了数百万的文件这样。
屏幕截图显示了生命周期规则窗口(在此拍摄注:前缀是空白的,影响到桶中的所有键):
在情况下,如果要删除使用Java AWS SDK 2.0“富/”前缀的所有对象
import java.util.ArrayList;
import java.util.Iterator;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
//...
ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder()
.bucket(bucketName)
.prefix("foo/")
.build()
;
ListObjectsResponse objectsResponse = s3Client.listObjects(listObjectsRequest);
while (true) {
ArrayList<ObjectIdentifier> objects = new ArrayList<>();
for (Iterator<?> iterator = objectsResponse.contents().iterator(); iterator.hasNext(); ) {
S3Object s3Object = (S3Object)iterator.next();
objects.add(
ObjectIdentifier.builder()
.key(s3Object.key())
.build()
);
}
s3Client.deleteObjects(
DeleteObjectsRequest.builder()
.bucket(bucketName)
.delete(
Delete.builder()
.objects(objects)
.build()
)
.build()
);
if (objectsResponse.isTruncated()) {
objectsResponse = s3Client.listObjects(listObjectsRequest);
continue;
}
break;
};
我只是删除从我的桶中的所有文件使用PowerShell的:
Get-S3Object -BucketName YOUR_BUCKET | % { Remove-S3Object -BucketName YOUR_BUCKET -Key $_.Key -Force:$true }
随着s3cmd
安装在Linux机器上的包,你可以这样做
s3cmd rm s3://foo/bar --recursive
在使用AWS-SKD红宝石V2情况。
s3.list_objects(bucket: bucket_name, prefix: "foo/").contents.each do |obj|
next if obj.key == "foo/"
resp = s3.delete_object({
bucket: bucket_name,
key: obj.key,
})
end
请注意,所有的下斗“富/ *”将删除。
Just saw that Amazon added a "How to Empty a Bucket" option to the AWS console menu:
http://docs.aws.amazon.com/AmazonS3/latest/UG/DeletingaBucket.html
最好的办法是使用生命周期规则来删除整桶的内容。 编程您可以使用下面的代码(PHP)把生命周期规则。
$expiration = array('Date' => date('U', strtotime('GMT midnight')));
$result = $s3->putBucketLifecycle(array(
'Bucket' => 'bucket-name',
'Rules' => array(
array(
'Expiration' => $expiration,
'ID' => 'rule-name',
'Prefix' => '',
'Status' => 'Enabled',
),
),
));
在上述情况下,所有的对象将会被删除起始日期 - “今天午夜GMT”。
您也可以指定如下天。 但随着天它会等待至少24个小时(1天最小)开始删除桶含量。
$expiration = array('Days' => 1);
我需要做下面...
def delete_bucket
s3 = init_amazon_s3
s3.buckets['BUCKET-NAME'].objects.each do |obj|
obj.delete
end
end
def init_amazon_s3
config = YAML.load_file("#{Rails.root}/config/s3.yml")
AWS.config(:access_key_id => config['access_key_id'],:secret_access_key => config['secret_access_key'])
s3 = AWS::S3.new
end
该投了答案中缺少一个步骤。
每AWS S3的帮助:
目前,在命令的路径参数使用UNIX风格的通配符不支持。 然而,大多数命令具有
--exclude "<value>"
和--include "<value>"
,可以实现所期望的结果参数.........当有多个过滤器,所述规则是过滤器出现在命令后优先于先前在命令中出现的过滤器。 例如,如果传递给命令滤波器参数为--exclude "*"
--include "*.txt"
所有文件都将在命令排除文件以txt结尾除
aws s3 rm --recursive s3://bucket/ --exclude="*" --include="/folder_path/*"