Kecuali jika saya melewatkan sesuatu, sepertinya tidak ada API yang saya lihat yang akan memberi tahu Anda berapa banyak objek dalam bucket / folder S3 (awalan). Apakah ada cara untuk mendapat hitungan?
Kecuali jika saya melewatkan sesuatu, sepertinya tidak ada API yang saya lihat yang akan memberi tahu Anda berapa banyak objek dalam bucket / folder S3 (awalan). Apakah ada cara untuk mendapat hitungan?
Jawaban:
Tidak mungkin, kecuali Anda
daftar semuanya dalam batch 1000 (yang bisa lambat dan menyedot bandwidth - amazon sepertinya tidak pernah mengompres respons XML), atau
masuk ke akun Anda di S3, dan buka Akun - Penggunaan. Tampaknya dept penagihan tahu persis berapa banyak objek yang telah Anda simpan!
Cukup mengunduh daftar semua objek Anda sebenarnya akan memakan waktu dan biaya sejumlah uang jika Anda menyimpan 50 juta objek.
Lihat juga utas ini tentang StorageObjectCount - yang ada di data penggunaan.
S3 API untuk mendapatkan setidaknya dasar-dasarnya, bahkan jika itu sudah jam, akan lebih bagus.
aws s3 ls s3://mybucket/ --recursive | wc -l
atau
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
Catatan: Perintah cloudwatch di atas tampaknya berfungsi untuk beberapa sementara tidak untuk yang lain. Dibahas di sini: https://forums.aws.amazon.com/thread.jspa?threadID=217050
Anda dapat melihat bagian metrik cloudwatch untuk mendapatkan kira-kira jumlah objek yang disimpan.
Saya memiliki sekitar 50 Juta produk dan butuh lebih dari satu jam untuk dihitung menggunakan aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Ada --summarize
saklar yang menyertakan informasi ringkasan ember (yaitu jumlah objek, ukuran total).
Inilah jawaban yang benar menggunakan AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Lihat dokumentasi
Total Objects: 7235
Total Size: 475566411749
- sangat mudah.
Meskipun ini adalah pertanyaan lama, dan umpan balik diberikan pada tahun 2015, sekarang ini lebih sederhana, karena S3 Web Console telah mengaktifkan opsi "Dapatkan Ukuran":
Yang menyediakan berikut ini:
Jika Anda menggunakan alat baris perintah s3cmd , Anda bisa mendapatkan daftar rekursif dari ember tertentu, mengeluarkannya ke file teks.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Kemudian di linux Anda dapat menjalankan wc -l pada file untuk menghitung baris (1 baris per objek).
wc -l listing.txt
-r
in adalah untuk --recursive
, jadi itu juga bisa digunakan untuk sub-folder.
aws s3 ls
daripada s3cmd karena lebih cepat. b.) Untuk ember besar perlu waktu lama. Butuh waktu sekitar 5 menit untuk file 1mil. c.) Lihat jawaban saya di bawah ini tentang menggunakan cloudwatch.
Ada solusi mudah dengan API S3 sekarang (tersedia di AWS CLI):
aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
atau untuk folder tertentu:
aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
Illegal token value '(Contents[])]'
(versi 1.2.9 dari aws-cli), saat hanya menggunakan --bucket my-bucket
dan A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
ketika menggunakan --bucket s3://my-bucket
. (Pasti ada, dan memiliki 1000+ file.)
Anda dapat menggunakan metrik jam tangan AWS untuk s3 untuk melihat jumlah pasti untuk setiap kotak.
Anda dapat dengan mudah mendapatkan jumlah total dan riwayat jika Anda pergi ke konsol "Manajemen" tab s3 dan kemudian klik pada "Metrik" ... Cuplikan layar tab
NumberOfObjects (count/day)
grafik? Akan lebih baik karena terkait langsung dengan pertanyaan. Di tangkapan layar, Anda menunjukkan BucketSizeBytes (bytes/day)
yang, meskipun bermanfaat, tidak terkait langsung dengan masalah tersebut.
Api akan mengembalikan daftar dalam peningkatan 1000. Periksa properti IsTruncated untuk melihat apakah masih ada lagi. Jika ada, Anda perlu melakukan panggilan lain dan meneruskan kunci terakhir yang Anda dapatkan sebagai properti Marker pada panggilan berikutnya. Anda kemudian akan terus loop seperti ini sampai IsTruncated salah.
Lihat dokumen Amazon ini untuk info lebih lanjut: Iterasi Melalui Hasil Multi-Halaman
Utas lama, tetapi masih relevan ketika saya mencari jawabannya sampai saya baru menemukan jawabannya. Saya ingin jumlah file menggunakan alat berbasis GUI (yaitu tidak ada kode). Saya kebetulan sudah menggunakan alat yang disebut 3Hub untuk drag & drop transfer ke dan dari S3. Saya ingin tahu berapa banyak file yang saya miliki di ember tertentu (saya pikir penagihan tidak dapat dirobohkan dengan ember).
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
Saya memiliki 20521 file di ember dan menghitung file dalam waktu kurang dari satu menit.
Saya menggunakan skrip python dari scalablelogic.com (menambahkan dalam penghitungan logging). Bekerja dengan baik.
#!/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
Di s3cmd, jalankan saja perintah berikut (pada sistem Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Jika Anda menggunakan AWS CLI pada Windows, Anda dapat menggunakan Measure-Object
dari PowerShell untuk mendapatkan jumlah total file, seperti wc -l
pada * nix.
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
Semoga ini bisa membantu.
Salah satu cara paling sederhana untuk menghitung jumlah objek di s3 adalah:
Langkah1: Pilih folder root Langkah2: Klik Tindakan -> Hapus (Jelas, berhati-hatilah jangan menghapusnya) Langkah3: Tunggu beberapa menit saja akan menunjukkan jumlah objek dan ukuran totalnya.
UpVote jika Anda menemukan solusinya.
Tak satu pun dari API akan memberi Anda hitungan karena sebenarnya tidak ada API khusus Amazon untuk melakukan itu. Anda hanya perlu menjalankan daftar-isi dan menghitung jumlah hasil yang dikembalikan.
Dari baris perintah di AWS CLI, gunakan ls plus --summarize
. Ini akan memberi Anda daftar semua item Anda dan jumlah total dokumen dalam ember tertentu. Saya belum mencoba ini dengan ember yang berisi sub-ember:
aws s3 ls "s3://MyBucket" --summarize
Butuh agak lama (butuh daftar 16 + K dokumen saya sekitar 4 menit), tapi lebih cepat daripada menghitung 1K pada suatu waktu.
Bagaimana dengan analitik kelas penyimpanan S3 - Anda mendapatkan API serta konsol - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
Anda dapat mengunduh dan menginstal browser s3 dari http://s3browser.com/ . Ketika Anda memilih sebuah ember di sudut kanan tengah, Anda dapat melihat jumlah file di dalam ember. Tapi, ukuran yang ditunjukkannya salah dalam versi saat ini.
Gubs
Cara termudah adalah dengan menggunakan konsol pengembang, misalnya, jika Anda menggunakan chrome, pilih Tools Developer, dan Anda dapat melihat yang berikut, Anda dapat menemukan dan menghitung atau melakukan kecocokan, seperti 280-279 + 1 = 2
...
Saya menemukan alat browser S3 sangat user, ia menyediakan file dan folder dan jumlah total juga ukuran untuk folder apa pun secara rekursif
Tautan unduhan: https://s3browser.com/download.aspx
Dapat juga dilakukan dengan gsutil du
(Ya, alat Google Cloud)
gsutil du s3://mybucket/ | wc -l
Anda bisa menjalankan perintah cli ini untuk mendapatkan jumlah total file dalam bucket atau folder tertentu
Pindai seluruh ember
aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l
Anda dapat menggunakan perintah ini untuk mendapatkan detail
aws s3api list-objects-v2 --bucket BUCKET_NAME
Pindai folder tertentu
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
Jika Anda mencari file tertentu, katakanlah .jpg
gambar, Anda dapat melakukan hal berikut:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Berikut ini adalah bagaimana Anda dapat melakukannya dengan menggunakan klien 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;
}
}
Berikut versi boto3 dari skrip python yang tertanam di atas.
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