내가 빠진 것이 아닌 한, 내가 본 API 중 어느 것도 S3 버킷 / 폴더 (접두사)에 얼마나 많은 객체가 있는지 알려주지 않습니다. 수를 얻는 방법이 있습니까?
내가 빠진 것이 아닌 한, 내가 본 API 중 어느 것도 S3 버킷 / 폴더 (접두사)에 얼마나 많은 객체가 있는지 알려주지 않습니다. 수를 얻는 방법이 있습니까?
답변:
당신이 아니면 방법은 없습니다
1000 단위로 모두 나열하십시오 (이는 느리고 대역폭이 빠를 수 있습니다-아마존은 XML 응답을 압축하지 않는 것 같습니다).
S3에서 계정에 로그인하고 계정-사용으로 이동하십시오. 청구 부서가 얼마나 많은 객체를 저장했는지 알고있는 것 같습니다!
모든 개체 목록을 다운로드하기 만하면 5 천만 개의 개체가 저장되어있는 경우 실제로 시간과 비용이 소요됩니다.
사용량 데이터에있는 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
클라우드 워치의 측정 항목 섹션 을 보면 대략 수의 객체가 저장됩니다.
약 5 천만 개의 제품이 있으며 사용하는 데 1 시간 이상이 걸렸습니다. 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
그런 다음 리눅스에서는 파일에서 wc -l을 실행하여 줄 수를 계산할 수 있습니다 (객체 당 한 줄).
wc -l listing.txt
-r
명령에은을위한 --recursive
그것뿐만 아니라 하위 폴더에 대한 작업을해야하므로.
aws s3 ls
더 빠르기 때문에 s3cmd 대신 사용해야합니다 . b.) 큰 버킷의 경우 시간이 오래 걸릴 수 있습니다. 1mil 파일에 약 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 개 이상의 파일이 있습니다.)
s3 콘솔 "Management (관리)"탭으로 이동 한 다음 "Metrics (메트릭)"를 클릭하면 총 수와 기록을 쉽게 얻을 수 있습니다. 탭의 스크린 샷
NumberOfObjects (count/day)
차트 를 표시하도록 그림을 업데이트 할 수 있습니까? 질문과 직접 관련이 있기 때문에 더 좋을 것입니다. 스크린 샷에서 BucketSizeBytes (bytes/day)
유용하지만 문제와 직접 관련이없는 것을 보여줍니다 .
API는 1000 단위로 목록을 반환합니다. IsTruncated 속성을 확인하여 여전히 더 있는지 확인하십시오. 있는 경우 다른 전화를 걸어 다음 전화에서 Marker 속성으로 얻은 마지막 키를 전달해야합니다. 그런 다음 IsTruncated가 false가 될 때까지 계속 이렇게 반복합니다.
자세한 내용은이 Amazon 문서를 참조하십시오 : 다중 페이지 결과를 통한 반복
오래된 스레드이지만 방금 이것을 알아낼 때까지 대답을 찾고 있었지만 여전히 관련이 있습니다. GUI 기반 도구 (예 : 코드 없음)를 사용하여 파일 수를 원했습니다. S3과의 드래그 앤 드롭 전송에 이미 3Hub라는 도구를 사용하고 있습니다. 특정 버킷에 몇 개의 파일이 있는지 알고 싶었습니다 (빌링이 버킷별로 분류한다고 생각하지 않습니다).
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 개의 파일이 있고 1 분 이내에 파일 수를 계산했습니다.
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
s3에서 객체 수를 계산하는 가장 간단한 방법 중 하나는 다음과 같습니다.
1 단계 : 루트 폴더 선택 2 단계 : 작업-> 삭제를 클릭하십시오 (분명히 삭제하지 마십시오) 3 단계 : 몇 분 동안 aws가 객체 수와 총 크기를 표시합니다.
솔루션을 찾으면 UpVote.
실제로 Amazon 특정 API가 없으므로 API 중 어느 것도 카운트를 제공하지 않습니다. 리스트 컨텐츠를 실행하고 리턴되는 결과 수를 세어야합니다.
S3 스토리지 클래스 분석은 어떻습니까-API는 물론 콘솔에서도 얻을 수 있습니다-https: //docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
http://s3browser.com/ 에서 s3 브라우저를 다운로드하여 설치할 수 있습니다 . . 중앙 오른쪽 모서리에서 버킷을 선택하면 버킷의 파일 수를 볼 수 있습니다. 그러나 현재 버전에서는 표시되는 크기가 올바르지 않습니다.
검
가장 쉬운 방법은 개발자 콘솔을 사용하는 것입니다. 예를 들어 크롬을 사용하는 경우 개발자 도구를 선택하면 다음을 볼 수 있습니다 .280-279 + 1 = 2와 같이 일치하는 항목을 찾아서 계산하거나 수행 할 수 있습니다
...
나는 S3 브라우저 도구를 매우 사용자로 찾았으며 파일과 폴더를 제공하고 모든 폴더의 크기와 재귀를 재귀 적으로 제공합니다.
다운로드 링크 : https://s3browser.com/download.aspx
이 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;
}
}
여기에 포함 된 파이썬 스크립트의 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-재귀 | 화장실 -l