Если мне что-то не хватает, кажется, что ни один из API, на который я смотрел, не скажет вам, сколько объектов находится в ведре/папке S3 (префикс). Есть ли способ получить счет?
Как узнать, сколько объектов я хранили в ведро S3?
Ответ 1
Нет способа, если вы
-
перечислить их все в партиях 1000 (что может быть медленным и сосать пропускную способность - амазонка, кажется, никогда не сжимает ответы XML), или
-
войдите в свою учетную запись на S3 и перейдите на страницу "Учетная запись - использование". Кажется, что биллинговый отдел точно знает, сколько объектов вы сохранили!
Простое скачивание списка всех ваших объектов займет некоторое время и стоит денег, если у вас есть 50 миллионов объектов.
Также см. этот поток о StorageObjectCount - который находится в данных об использовании.
API S3, чтобы получить хотя бы основы, даже если это было часами, было бы здорово.
Ответ 2
Использование 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
Вы можете посмотреть метрическую секцию cloudwatch, чтобы получить приблизительно количество сохраненных объектов.
У меня около 50 миллионов продуктов, и вам потребовалось больше часа, чтобы использовать aws s3 ls
Ответ 3
Существует переключатель --summarize
, который включает в себя сводную информацию о корзине (то есть количество объектов, общий размер).
Вот правильный ответ, используя AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
см. документацию
Ответ 4
Хотя это старый вопрос, и обратная связь была предоставлена в 2015 году, сейчас это намного проще, поскольку S3 Web Console включила опцию "Получить размер":
Что обеспечивает следующее:
Ответ 5
Если вы используете инструмент командной строки s3cmd, вы можете получить рекурсивный список конкретного ведра, выводя его в текстовый файл.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Затем в linux вы можете запустить wc -l в файле для подсчета строк (1 строка на объект).
wc -l listing.txt
Ответ 6
Теперь существует простое решение с 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[])]"
Ответ 7
Вы можете использовать метрики AWS cloudwatch для s3, чтобы увидеть точное количество для каждого ведра.
Ответ 8
Перейдите на AWS Billing, затем отчитайте, затем AWS. Выберите Amazon Simple Storage Service, затем Operation StandardStorage. Затем вы можете загрузить CSV файл, который содержит UsageType для StorageObjectCount, который перечисляет количество элементов для каждого ведра.
Ответ 9
В s3cmd просто запустите следующую команду (в системе Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Ответ 10
Api вернет список с шагом 1000. Проверьте свойство IsTruncated, чтобы узнать, есть ли еще больше. Если есть, вам нужно сделать другой звонок и передать последний ключ, который вы получили как свойство Marker при следующем вызове. Затем вы продолжите цикл таким образом, чтобы IsTruncated был ложным.
См. этот документ Amazon для получения дополнительной информации: Итерация через многостраничные результаты
Ответ 11
Старый поток, но все еще актуальный, поскольку я искал ответ, пока не понял это. Мне нужен счетчик файлов с использованием инструмента на основе графического интерфейса (т.е. Никакого кода). Я уже использую инструмент под названием 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 файлов в ковше, и количество файлов было меньше минуты.
Ответ 12
Если вы используете AWS CLI в Windows, вы можете использовать Measure-Object
из PowerShell, чтобы получить общее количество файлов, как wc -l
в * nix.
PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object
Count : 25
Average :
Sum :
Maximum :
Minimum :
Property :
Надеюсь, поможет.
Ответ 13
Ни один из API не даст вам счет, потому что для этого не существует какого-либо специфического API Amazon. Вы должны просто запустить содержимое списка и подсчитать количество возвращаемых результатов.
Ответ 14
Я использовал python script из scalablelogic.com (добавление в журнал подсчета). Отлично работает.
#!/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
Ответ 15
Вы можете легко получить общее количество и историю, если перейдете на вкладку "Управление" консоли s3, а затем нажмите "Метрики"... Снимок экрана с вкладкой
Ответ 16
3Hub прекращено. Там лучшее решение, вы можете использовать Transmit (только для Mac), затем вы просто подключаетесь к своему ковшу и выбираете Show Item Count
из View
.
Ответ 17
Вы можете загрузить и установить браузер s3 из http://s3browser.com/. Когда вы выбираете ковш в центральном правом углу, вы можете увидеть количество файлов в ковше. Но размер, который он показывает, неверен в текущей версии.
Gubs
Ответ 18
Самый простой способ - использовать консоль разработчика, например, если вы находитесь на хроме, выберите "Инструменты разработчика", и вы увидите следующее: вы можете найти или подсчитать или выполнить некоторое совпадение, например 280-279 + 1 = 2
...
Ответ 19
В командной строке в AWS CLI используйте ls plus --summarize
. Он предоставит вам список всех ваших предметов и общее количество документов в конкретном ковше. Я не пробовал это с ведрами, содержащими подкопы:
aws s3 ls "s3://MyBucket" --summarize
Это займет немного времени (потребовалось перечислить мои документы 16 + K около 4 минут), но это быстрее, чем подсчет 1K за раз.
Ответ 20
Как насчет аналитики класса хранилища S3 - вы получаете как API, так и консоль - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
Ответ 21
Я нашел инструмент браузера S3 очень удобным, он предоставляет файлы и папки, а также общее количество и размер для любой папки.
Ссылка для скачивания: https://s3browser.com/download.aspx
Ответ 22
Это также можно сделать с помощью gsutil du
(да, инструмент Google Cloud)
gsutil du s3://mybucket/ | wc -l
Ответ 23
Вы можете просто выполнить эту команду 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
Ответ 24
Если вы ищете конкретные файлы, например, изображения .jpg
, вы можете сделать следующее:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Ответ 25
Ниже описано, как вы можете сделать это с помощью 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;
}
}
Ответ 26
Вы можете использовать инвентарь Amazon S3, который предоставит вам список объектов в CSV файле.