除非我没有丢失任何东西,否则看来我看过的所有API都不会告诉您S3存储桶/文件夹(前缀)中有多少个对象。有什么方法可以计数吗?
除非我没有丢失任何东西,否则看来我看过的所有API都不会告诉您S3存储桶/文件夹(前缀)中有多少个对象。有什么方法可以计数吗?
Answers:
除非你没有办法
将它们全部以1000的批次列出(这可能很慢并且占用带宽-亚马逊似乎永远不会压缩XML响应),或者
在S3上登录到您的帐户,然后转到“帐户-使用情况”。帐单部门似乎确切知道您存储了多少个对象!
如果存储了5000万个对象,那么简单地下载所有对象的列表实际上将花费一些时间并花费一些钱。
另请参见关于StorageObjectCount的此线程 -在使用情况数据中。
一个S3 API至少能获得基础知识,即使它已经花了几个小时了,也还是不错的。
aws s3 ls s3://mybucket/ --recursive | wc -l
要么
aws cloudwatch get-metric-statistics \
--namespace AWS/S3 --metric-name NumberOfObjects \
--dimensions Name=BucketName,Value=BUCKETNAME \
Name=StorageType,Value=AllStorageTypes \
--start-time 2016-11-05T00:00 --end-time 2016-11-05T00:10 \
--period 60 --statistic Average
注意:上面的cloudwatch命令似乎对某些人有效,而对其他人则无效。此处讨论:https : //forums.aws.amazon.com/thread.jspa? threadID =217050
您可以查看cloudwatch的指标部分以获取大约存储的对象数。
我大约有五千万种产品,使用它花费了一个多小时 aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
有一个--summarize
开关,其中包含存储桶摘要信息 (即,对象数,总大小)。
这是使用AWS cli的正确答案:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
请参阅说明文件
Total Objects: 7235
Total Size: 475566411749
-很简单。
如果使用s3cmd命令行工具,则可以获取特定存储桶的递归列表,并将其输出到文本文件。
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
然后在linux中,您可以在文件上运行wc -l来计算行数(每个对象1行)。
wc -l listing.txt
-r
命令中的表示--recursive
,因此它也适用于子文件夹。
aws s3 ls
而不是s3cmd,因为它速度更快。b。)对于大桶,可能需要很长时间。处理1百万个文件大约需要5分钟。c。)请参阅下面有关使用Cloudwatch的答案。
S3 API现在有一个简单的解决方案(可在AWS cli中使用):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
或特定文件夹:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
当使用--bucket my-bucket
和A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
使用时,我得到(aws-cli的1.2.9版本)--bucket s3://my-bucket
。(它确实存在,并且有1000多个文件。)
旧线程,但在我一直想找出答案之前,仍然很重要。我想使用基于GUI的工具来计算文件数(即没有代码)。我碰巧已经使用了一个名为3Hub的工具来与S3进行拖放传输。我想知道一个特定存储桶中有多少个文件(我不认为计费可以按存储桶细分)。
So, using 3Hub,
- list the contents of the bucket (looks basically like a finder or explorer window)
- go to the bottom of the list, click 'show all'
- select all (ctrl+a)
- choose copy URLs from right-click menu
- paste the list into a text file (I use TextWrangler for Mac)
- look at the line count
我的存储桶中有20521个文件,并且文件计数在不到一分钟的时间内完成了。
我使用了来自scalablelogic.com的python脚本(添加了计数日志)。很棒。
#!/usr/local/bin/python
import sys
from boto.s3.connection import S3Connection
s3bucket = S3Connection().get_bucket(sys.argv[1])
size = 0
totalCount = 0
for key in s3bucket.list():
totalCount += 1
size += key.size
print 'total size:'
print "%.3f GB" % (size*1.0/1024/1024/1024)
print 'total count:'
print totalCount
在s3cmd中,只需运行以下命令(在Ubuntu系统上):
s3cmd ls -r s3://mybucket | wc -l
在s3中计算对象数量的最简单方法之一是:
步骤1:选择根文件夹步骤2:单击操作->删除(显然,请注意不要删除它)步骤3:等待几分钟,aws将显示对象数量及其总大小。
如果找到解决方案,则进行UpVote。
如何进行S3存储类分析-您可以获得API以及在控制台上获得-https: //docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
您可以从http://s3browser.com/下载并安装s3浏览器。当您在右上角选择存储桶时,您可以看到该存储桶中的文件数。但是,它显示的大小在当前版本中不正确。
广东商学院
最简单的方法是使用开发人员控制台,例如,如果您使用的是chrome,请选择“开发人员工具”,然后您会看到以下内容,您可以查找并计数或进行一些匹配,例如280-279 + 1 = 2
...
我发现S3浏览器工具非常实用,它递归地提供文件和文件夹以及总数以及任何文件夹的大小
也可以用做gsutil du
(是的,谷歌的云工具)
gsutil du s3://mybucket/ | wc -l
您只需执行此cli命令即可获取存储桶或特定文件夹中的文件总数
扫描整个存储桶
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
您可以使用此命令获取详细信息
aws s3api list-objects-v2 --bucket BUCKET_NAME
扫描特定文件夹
aws s3api list-objects-v2 --bucket testbucket --prefix testfolder --start-after testfolder/ | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME --prefix FOLDER_NAME --start-after FOLDER_NAME/ | grep "Key" | wc -l
如果您要查找特定文件(例如.jpg
图像),则可以执行以下操作:
aws s3 ls s3://your_bucket | grep jpg | wc -l
以下是使用Java客户端的方法。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.519</version>
</dependency>
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;
public class AmazonS3Service {
private static final String S3_ACCESS_KEY_ID = "ACCESS_KEY";
private static final String S3_SECRET_KEY = "SECRET_KEY";
private static final String S3_ENDPOINT = "S3_URL";
private AmazonS3 amazonS3;
public AmazonS3Service() {
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProtocol(Protocol.HTTPS);
clientConfiguration.setSignerOverride("S3SignerType");
BasicAWSCredentials credentials = new BasicAWSCredentials(S3_ACCESS_KEY_ID, S3_SECRET_KEY);
AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration(S3_ENDPOINT, null);
amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider).withClientConfiguration(clientConfiguration)
.withPathStyleAccessEnabled(true).withEndpointConfiguration(endpointConfiguration).build();
}
public int countObjects(String bucketName) {
int count = 0;
ObjectListing objectListing = amazonS3.listObjects(bucketName);
int currentBatchCount = objectListing.getObjectSummaries().size();
while (currentBatchCount != 0) {
count += currentBatchCount;
objectListing = amazonS3.listNextBatchOfObjects(objectListing);
currentBatchCount = objectListing.getObjectSummaries().size();
}
return count;
}
}
这是上面嵌入的python脚本的boto3版本。
import sys
import boto3
s3 = boto3.resource('s3')
s3bucket = s3.Bucket(sys.argv[1])
size = 0
totalCount = 0
for key in s3bucket.objects.all():
totalCount += 1
size += key.size
print('total size:')
print("%.3f GB" % (size*1.0/1024/1024/1024))
print('total count:')
print(totalCount)`
aws s3 ls s3:// bucket-name / folder-prefix-if-any –递归| wc -l