S3 버킷에 저장된 객체 수를 어떻게 알 수 있습니까?


155

내가 빠진 것이 아닌 한, 내가 본 API 중 어느 것도 S3 버킷 / 폴더 (접두사)에 얼마나 많은 객체가 있는지 알려주지 않습니다. 수를 얻는 방법이 있습니까?


이 질문이 도움이 될 것입니다 : stackoverflow.com/questions/701545/…
Brendan Long

1
솔루션은 2015 년에 지금 존재를 수행합니다 stackoverflow.com/a/32908591/578989
Mayank Jaiswal에게

아래 답변을 참조하십시오 : stackoverflow.com/a/39111698/996926
advncd

답변:


39

당신이 아니면 방법은 없습니다

  1. 1000 단위로 모두 나열하십시오 (이는 느리고 대역폭이 빠를 수 있습니다-아마존은 XML 응답을 압축하지 않는 것 같습니다).

  2. S3에서 계정에 로그인하고 계정-사용으로 이동하십시오. 청구 부서가 얼마나 많은 객체를 저장했는지 알고있는 것 같습니다!

모든 개체 목록을 다운로드하기 만하면 5 천만 개의 개체가 저장되어있는 경우 실제로 시간과 비용이 소요됩니다.

사용량 데이터에있는 StorageObjectCount에 대한이 스레드 도 참조하십시오 .

몇 시간이 지난 경우에도 최소한 기본 사항을 얻는 S3 API가 좋습니다.


그건 그렇고 그 링크는 죽었습니다.
필드


나처럼 게으른 경우 Newvem은 기본적으로이를 대신하여 S3 계정 전체에서 버킷 단위로 결과를 집계 / 추적합니다.
rcoup

2
@MayankJaiswal 님의 답변을 포함하도록 답변을 업데이트 할 수 있습니까?
Joseph Casey

1
청구 부서는 모든 것을 알고 있습니다! 어떤 사람들은 사고로 동해안을 S3 취할 수있는 힘을 가지고 궁금해
ski_squaw

256

AWS CLI 사용

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

AWS 웹 콘솔 사용

클라우드 워치의 측정 항목 섹션 을 보면 대략 수의 객체가 저장됩니다. 여기에 이미지 설명을 입력하십시오

약 5 천만 개의 제품이 있으며 사용하는 데 1 시간 이상이 걸렸습니다. aws s3 ls


18
이것은 상단에 더 가까워 야합니다.
Joseph Casey

3
@JosephMCasey 동의합니다. 이것은 또한 버킷과 함께 디렉토리에있는 객체의 수를 다음과 같이 제공합니다 :aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
tim peterson

1
cmd 프롬프트에서 위의 내용을 실행할 때이 오류가 발생합니다. 'wc'는 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. -나는 이것에 익숙하지 않아 누군가가 해결책을 줄 수 있습니까?
Sandun

CloudWatch가 매우 안정적이지 않다는 경고. CloudWatch (NumberOfObjects 지표)가 2,300 개의 개별 객체로 계산되는 mp4 파일이 하나의 버킷에 있습니다. AWS CLI로 올바른 번호를 얻었습니다.
AlexK

왜 "평균"입니까? 누군가 "Sum"을 대신 원하지 않습니까?
ffxsam

150

버킷 요약 정보 (예 : 객체 수, 총 크기) --summarize를 포함 하는 스위치가 있습니다 .

다음은 AWS cli를 사용한 정답입니다.

aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"

Total Objects: 194273

설명서를 참조하십시오


4
이것은 대단합니다 : Total Objects: 7235 Total Size: 475566411749너무 쉽습니다.
bonh

16
불행히도 (현재는 600,000 이상이므로 많은 시간이 소요됩니다)
MichaelChirico

5M 객체가 포함 된 버킷에서이 작업을 실행하는 데 드는 비용은 얼마입니까?
Psychozoic

2
이 답변은 매우 비효율적이며 잠재적으로 매우 느리고 비용이 많이 듭니다. 전체 버킷을 반복하여 답을 찾습니다.
weaver

2
또한 표준 스토리지에 저장된 12 억 개 이상의 객체를 반복하면 약 6000 달러가 소요될 수 있습니다.
C Johnson

66

이것은 오래된 질문이지만 2015 년에 피드백이 제공되었지만 S3 웹 콘솔이 "크기 가져 오기"옵션을 활성화 했으므로 훨씬 간단합니다.

여기에 이미지 설명을 입력하십시오

다음을 제공합니다.

여기에 이미지 설명을 입력하십시오


1
예. 새로운 AWS 콘솔은 눈을 아프게하지만 버튼 클릭으로 사용할 수있는 객체 수와 총 크기를 계산합니다.
Ani

11
이것은 폴더 수준에서만 작동하는 것으로 보입니다. 버킷 수준
G-

1
@지-. 버킷 폴더를 모두 선택하면 어떻게됩니까?
gvasquez

4
@지-. 그러나 "모두 선택"상자는 버킷의 모든 폴더 / 개체가 아니라 페이지에 표시된 폴더와 개체 만 선택합니다.
gparis

2
@gparis 좋은 지적. 주목할 가치가 있습니다. 감사. 이 콘솔에서이 나타납니다 그래서 한 페이지에 표시 할 수있는 것보다 더 많은 파일이나 폴더가있는 경우, 우리는 옵션이 없습니다
G-합니다.

50

s3cmd 명령 줄 도구 를 사용하면 특정 버킷의 재귀 목록을 가져 와서 텍스트 파일로 출력 할 수 있습니다.

s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt

그런 다음 리눅스에서는 파일에서 wc -l을 실행하여 줄 수를 계산할 수 있습니다 (객체 당 한 줄).

wc -l listing.txt

-r명령에은을위한 --recursive그것뿐만 아니라 하위 폴더에 대한 작업을해야하므로.
Deepak Joy

이것에 3 개의 주. a.) aws s3 ls더 빠르기 때문에 s3cmd 대신 사용해야합니다 . b.) 큰 버킷의 경우 시간이 오래 걸릴 수 있습니다. 1mil 파일에 약 5 분이 걸렸습니다. c.) cloudwatch 사용에 대한 아래 답변을 참조하십시오.
mastaBlasta

46

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[])]"

1
Raphael, 폴더가 비어 있거나 존재하지 않는 경우를 제외하고는 폴더 쿼리가 훌륭하게 작동 합니다. , 'object'], received : "null" 폴더가 비어 있거나 종료되지 않은 경우 0으로 출력하는 방법이 있습니까?
user3591836

1
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 개 이상의 파일이 있습니다.)
Darren Cook

@DarrenCook 버킷 이름에서 s3 : //를 제거하십시오. 클라이언트가 프로토콜을 지원하지 않는 것 같습니다.
Sriranjan Manjunath 2016 년

이것은 wc -l 예제보다 훨씬 빠릅니다. 내 양동이로 약 3-4k 객체 / 초를 계산합니다. 따라서 백만 개체 당 ~ 5 분. S3 웹 GUI의 "크기 가져 오기"는 거의 같은 시간이 걸리기 때문에 후드에서 비슷한 것을 사용합니다.
notpeter

들어 매우 큰 양동이,이 (20 분 미만)에서 합리적인 시간 내에 나를 위해 일한 것이 유일한 해결책이었다
닉 여름 원피스

40

s3에 대한 AWS 클라우드 워치 지표를 사용하여 각 버킷의 정확한 수를 확인할 수 있습니다. 버킷을 선택할 때 Cloudwatch 지표


이것이 가장 좋은 답변이라고 생각합니다
Oktav

1m + 키 나열과 같은 말도 안되는 유일한 대답입니다. 나는 그것이 잊어 버렸습니다.
Andrew Backer

더 많은 투표가 필요합니다. 다른 모든 솔루션은 비용과 시간 측면에서 제대로 확장되지 않습니다.
Aaron R.

5

AWS Billing으로 이동 한 다음 보고서, AWS Usage 보고서로 이동하십시오. Amazon Simple Storage Service를 선택한 다음 Operation StandardStorage를 선택하십시오. 그런 다음 UsageType의 StorageObjectCount가 포함 된 CSV 파일을 다운로드하여 각 버킷의 항목 수를 나열 할 수 있습니다.


4

s3 콘솔 "Management (관리)"탭으로 이동 한 다음 "Metrics (메트릭)"를 클릭하면 총 수와 기록을 쉽게 얻을 수 있습니다. 탭의 스크린 샷


NumberOfObjects (count/day)차트 를 표시하도록 그림을 업데이트 할 수 있습니까? 질문과 직접 ​​관련이 있기 때문에 더 좋을 것입니다. 스크린 샷에서 BucketSizeBytes (bytes/day)유용하지만 문제와 직접 관련이없는 것을 보여줍니다 .
guzmonne

1
2019 년 현재이 답변이 허용됩니다. 나머지는 모두 구식이거나 느립니다.
C Johnson

2

API는 1000 단위로 목록을 반환합니다. IsTruncated 속성을 확인하여 여전히 더 있는지 확인하십시오. 있는 경우 다른 전화를 걸어 다음 전화에서 Marker 속성으로 얻은 마지막 키를 전달해야합니다. 그런 다음 IsTruncated가 false가 될 때까지 계속 이렇게 반복합니다.

자세한 내용은이 Amazon 문서를 참조하십시오 : 다중 페이지 결과를 통한 반복


2

오래된 스레드이지만 방금 이것을 알아낼 때까지 대답을 찾고 있었지만 여전히 관련이 있습니다. 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 분 이내에 파일 수를 계산했습니다.


2

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

boto3에서는 작동하지 않습니다. 나는 아래의 제안을 다른 대답으로 공헌했습니다.
fuzzygroup

2

s3cmd에서 우분투 시스템에서 다음 명령을 실행하십시오.

s3cmd ls -r s3://mybucket | wc -l

13
기존 답변 의 형식이 잘못된 사본을 게시하기 위해 5 살짜리 질문을 부활시킨 이유는 무엇 입니까?
2 비트 연금술사

이전 답변은 불필요하게 출력을 txt 파일로 파이프했습니다.
mjsa

10
IMO는 그 답변에 대한 의견이어야합니다. 이것은 정말 사소한 차이입니다.
2 비트 연금술사

2
특히이 질문에 대한 선택된 답변은 '방법은 없습니다 ...'로 시작하고 @mjsa는 한 줄 답변을 제공했기 때문에 가치있는 답변처럼 보입니다.
Nan

버전이 지정된 개체를 고려하지 않기 때문에 좋은 대답이 아닙니다.
시간

2

Windows에서 AWS CLI를 사용하는 경우 * nix에서 Measure-Object와 같이 PowerShell에서 from을 사용 하여 총 파일 수를 얻을 수 있습니다 wc -l.

PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object

Count    : 25
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

도움이 되길 바랍니다.


2

s3에서 객체 수를 계산하는 가장 간단한 방법 중 하나는 다음과 같습니다.

1 단계 : 루트 폴더 선택 2 단계 : 작업-> 삭제를 클릭하십시오 (분명히 삭제하지 마십시오) 3 단계 : 몇 분 동안 aws가 객체 수와 총 크기를 표시합니다.

솔루션을 찾으면 UpVote.


1

실제로 Amazon 특정 API가 없으므로 API 중 어느 것도 카운트를 제공하지 않습니다. 리스트 컨텐츠를 실행하고 리턴되는 결과 수를 세어야합니다.


어떤 이유로 루비 라이브러리 (right_aws / appoxy_aws)는 버킷에서 처음 1000 개 이상의 객체를 나열하지 않습니다. 모든 물건을 열거 할 다른 사람이 있습니까?
필드

목록을 요청하면 토큰과 함께 요청을 다시 보내는 데 사용할 수있는 "NextToken"필드가 제공되며 추가 목록이 표시됩니다.
Mitch Dempsey

1

AWS CLI의 명령 줄에서을 사용하십시오 ls plus --summarize. 모든 항목의 목록과 특정 버킷의 총 문서 수를 제공합니다. 하위 버킷을 포함하는 버킷으로는 이것을 시도하지 않았습니다.

aws s3 ls "s3://MyBucket" --summarize

시간이 조금 걸리지 만 (16 분 이상의 K 문서는 약 4 분이 걸렸지 만) 한 번에 1K를 계산하는 것보다 빠릅니다.



0

3 허브 가 중단되었습니다. 더 나은 솔루션이 있습니다. 전송 (Mac 만 해당)을 사용하고 버킷에 연결 한 다음 메뉴 Show Item Count에서 선택 하면 View됩니다.


안타깝게도 전송은 최대 1000 개의 항목 만 표시합니다 (따라서 항목 수도 1000
Tino

0

http://s3browser.com/ 에서 s3 브라우저를 다운로드하여 설치할 수 있습니다 . . 중앙 오른쪽 모서리에서 버킷을 선택하면 버킷의 파일 수를 볼 수 있습니다. 그러나 현재 버전에서는 표시되는 크기가 올바르지 않습니다.


0

가장 쉬운 방법은 개발자 콘솔을 사용하는 것입니다. 예를 들어 크롬을 사용하는 경우 개발자 도구를 선택하면 다음을 볼 수 있습니다 .280-279 + 1 = 2와 같이 일치하는 항목을 찾아서 계산하거나 수행 할 수 있습니다

...


버킷에서 총 객체 수를 파악하기 위해 개발자 도구를 사용한 방법에 대해 좀 더 자세히 설명해 주시겠습니까?
Jugal Panchal

0

csv 파일의 객체 목록을 제공하는 Amazon S3 인벤토리를 잠재적으로 사용할 수 있습니다.




0

이 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

0

특정 파일을 찾고 있다면 .jpg이미지를 말하면 다음을 수행 할 수 있습니다.

aws s3 ls s3://your_bucket | grep jpg | wc -l

0

다음은 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;
    }
}

0

여기에 포함 된 파이썬 스크립트의 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)`

0

aws s3 ls s3 : // bucket-name / folder-prefix-if-any-재귀 | 화장실 -l


그것은 나를 위해 4258로 계산 된 1000 이상을 위해 작동합니다
KingAndrew

줄은 파일 수와 직접 일치하지 않습니다. 그들은 또한 날짜와 디렉토리에 대한 전체 라인을 가지고 있기 때문에.
CMCDragonkai

이 명령은 제한된 수의 파일에 대해서만 작동합니다. 필자의 경우 파일 수는 백만 개 이상이며 결과가 전혀 없습니다. 그러나 제한된 파일에는 좋은 옵션입니다.
Jugal Panchal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.