私が何かを見逃していない限り、私が調べたどのAPIも、S3バケット/フォルダー(プレフィックス)にあるオブジェクトの数を教えてくれないようです。カウントを取得する方法はありますか?
私が何かを見逃していない限り、私が調べたどのAPIも、S3バケット/フォルダー(プレフィックス)にあるオブジェクトの数を教えてくれないようです。カウントを取得する方法はありますか?
回答:
あなたがいない限り、方法はありません
それらをすべて1000のバッチでリストする(これは低速で帯域幅を消費する可能性があります-アマゾンはXML応答を決して圧縮しないようです)、または
S3でアカウントにログインし、[アカウント]-[使用状況]に移動します。請求部門はあなたが保存したオブジェクトの数を正確に知っているようです!
5,000万個のオブジェクトが保存されている場合、すべてのオブジェクトのリストをダウンロードするだけでは実際に時間がかかり、コストがかかります。
使用量データにある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? =217050
cloudwatchのメトリックセクションを見て、保存されているオブジェクトのおおよその数を取得できます。
約5000万の製品を使用しており、使用を数えるのに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
次に、Linuxでは、ファイルに対してwc -lを実行して、行をカウントできます(オブジェクトごとに1行)。
wc -l listing.txt
-r
コマンドでは用で--recursive
、それは同様にサブ・フォルダのために働く必要がありますので、。
aws s3 ls
より高速なので、s3cmdではなくを使用する必要があります。b。)大きなバケットの場合、長時間かかることがあります。1milファイルの場合、約5分かかりました。c。)クラウドウォッチの使用については、以下の私の回答を参照してください。
現在、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[])]'
だけ使用した場合、(AWS-CLIのバージョン1.2.9を)--bucket my-bucket
してA client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
使用した場合--bucket s3://my-bucket
。(間違いなく存在し、1000以上のファイルがあります。)
s3コンソールの[管理]タブに移動して[メトリック]をクリックすると、合計数と履歴を簡単に取得できます... タブのスクリーンショット
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つは、次のとおりです。
手順1:ルートフォルダーを選択します。手順2:[アクション]-> [削除]をクリックします(明らかに、削除しないように注意してください)。
あなたが解決策を見つけたらUpVote。
S3ストレージクラス分析はどうですか-APIとコンソールを利用できます-https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
s3ブラウザはhttp://s3browser.com/からダウンロードしてインストールできます。中央右隅にあるバケットを選択すると、バケット内のファイル数が表示されます。ただし、表示されるサイズは現在のバージョンでは正しくありません。
ガブ
最も簡単な方法は、開発者コンソールを使用することです。たとえば、Chromeを使用している場合は、[開発者ツール]を選択すると、次のように表示され、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;
}
}
上に埋め込まれた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 --recursive | wc -l