Быстрый способ перечислить все файлы в корзине Amazon S3?
151
У меня есть амазонка S3, в которой десятки тысяч имен файлов. Какой самый простой способ получить текстовый файл, в котором перечислены все имена файлов в корзине?
Как отмечается в комментарии jldupont к ответу, предоставленному vdaubry, boto.s3.bucketlistresultset.BucketListResultSetобращается к условию «десятки тысяч имен файлов», упомянутому в вопросе.
2013 г.
1
Имейте в виду, что для блоков с очень большим количеством объектов, скажем, миллионов или миллиардов, приведенные ниже подходы к кодированию / написанию сценариев не будут работать хорошо. Вместо этого следует включить инвентаризацию S3 и получить отчет об инвентаризации.
Если вы получаете: boto.exception.S3ResponseError: S3ResponseError: 403 Запрещено Убедитесь, что политика пользователя для ключа доступа / секретного ключа имеет доступ к S3.
AWS недавно выпустила свои инструменты командной строки. Это работает так же, как Бото и может быть установлен с помощью sudo easy_install awscliилиsudo pip install awscli
s3cmdвозвращает имена файлов, отсортированные по дате. Можно ли как-нибудь вернуть его, скажем, только те файлы, которые были добавлены после 2015-10-23 20:46?
SexyBeast
Обратите внимание, что если в именах файлов есть пробелы, у этого есть небольшая ошибка, но у меня нет awk-foo, чтобы это исправить
Colin D
36
Будьте осторожны, список Amazon возвращает только 1000 файлов. Если вы хотите перебрать все файлы, вы должны разбить результаты на страницы с помощью маркеров:
Это работает, но не совсем то, что мне нужно. Он просто перечисляет все префиксы «верхнего уровня». Есть ли способ получить все объекты в ведре, префиксы и все?
@rinogo Это не соответствует вашим потребностям, может быть ... но это работает, и это то, что имеет значение здесь. Это соответствует потребностям других людей в качестве правильного ответа.
Халил Гарбауи
Как я уже сказал, это работает - спасибо! Но это не отвечает на вопрос ОП. ОП попросил способ «[перечислить] все имена файлов в корзине». Здесь перечислены только объекты верхнего уровня, а не все объекты.
Риного
2
Ага но это не сложно сделать. Просто добавьте «--recursive» в команду. Я добавлю это в свой ответ, спасибо за указание на это
Халил Гарбауи
12
Для разработчиков Scala здесь это рекурсивная функция для выполнения полного сканирования и отображения содержимого корзины AmazonS3 с использованием официального пакета AWS SDK для Java.
Чтобы вызвать вышеупомянутую map()функцию карри , просто передайте уже созданный (и правильно инициализированный) объект AmazonS3Client (см. Официальный AWS SDK для Java API Reference ), имя корзины и имя префикса в первом списке параметров. Также передайте функцию, которую f()вы хотите применить для сопоставления каждой сводки объекта во втором списке параметров.
Например
val keyOwnerTuples = map(s3, bucket, prefix)(s =>(s.getKey, s.getOwner))
вернет полный список (key, owner)кортежей в этом сегменте / префиксе
если aws уже настроен, строки 2 и 3 можно заменить наs3 = boto3.resource('s3')
sinapan
Если у вас есть переменные окружения, вам не нужно использовать переменные в sessionметоде. AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Флавио
7
После zach я бы тоже порекомендовал boto , но мне нужно было немного изменить его код:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
Доступен еще один простой API, который берет имя корзины и перечисляет объекты, присутствующие в нем. ObjectListing objects = s3client.listObjects (bucketName) Ссылка на Javadoc приведена ниже, docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/…
Раджеш,
2
Код на python с использованием потрясающей "boto" lib . Код возвращает список файлов в сегменте, а также обрабатывает исключения для отсутствующих сегментов.
import boto
conn = boto.connect_s3(<ACCESS_KEY>,<SECRET_KEY>)try:
bucket = conn.get_bucket(<BUCKET_NAME>, validate =True)except boto.exception.S3ResponseError, e:
do_something()# The bucket does not exist, choose how to deal with it or raise the exceptionreturn[ key.name.encode("utf-8")for key in bucket.list()]
Не забудьте заменить <PLACE_HOLDERS> вашими значениями.
В качестве альтернативы вы можете использовать Minio Client aka mc. Его открытый исходный код и совместим с AWS S3. Он доступен для Linux, Windows, Mac, FreeBSD.
Все, что вам нужно сделать, это запустить команду mc ls для просмотра содержимого.
Настройка учетных данных AWS с помощью клиента Minio
$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Примечание. Пожалуйста, замените mys3 псевдонимом, который вы хотели бы использовать для этой учетной записи, и BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 на AWS ACCESS-KEY и SECRET-KEY.
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную, немедленную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.
Тоби Спейт
0
Упрощенная и обновленная версия ответа Scala от Paolo:
Самый простой способ получить очень удобный текстовый файл - это загрузить S3 Browser http://s3browser.com/ и использовать Генератор веб-URL для получения списка полных путей ссылки. Это очень удобно и занимает около 3 кликов.
boto.s3.bucketlistresultset.BucketListResultSet
обращается к условию «десятки тысяч имен файлов», упомянутому в вопросе.Ответы:
Я бы порекомендовал использовать Бото . Тогда это пара строк Python :
Сохраните это как list.py, откройте терминал, а затем запустите:
источник
AWS CLI
Документация для aws s3 ls
AWS недавно выпустила свои инструменты командной строки. Это работает так же, как Бото и может быть установлен с помощью
sudo easy_install awscli
илиsudo pip install awscli
После установки вы можете просто запустить
Который покажет вам все ваши доступные ведра
Затем вы можете запросить определенное ведро для файлов.
Команда :
Выход :
Это покажет вам все ваши файлы.
источник
--recursive
флаг, чтобы увидеть все объекты в указанном каталогеs3cmd неоценим для такого рода вещей
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
источник
s3cmd
возвращает имена файлов, отсортированные по дате. Можно ли как-нибудь вернуть его, скажем, только те файлы, которые были добавлены после2015-10-23 20:46
?Будьте осторожны, список Amazon возвращает только 1000 файлов. Если вы хотите перебрать все файлы, вы должны разбить результаты на страницы с помощью маркеров:
В рубине используя aws-s3
конец
Надеюсь, это поможет, Винсент
источник
Обновление 15-02-2019:
Эта команда выдаст вам список всех сегментов в AWS S3:
aws s3 ls
Эта команда предоставит вам список всех объектов верхнего уровня внутри корзины AWS S3:
aws s3 ls bucket-name
Эта команда выдаст вам список ВСЕХ объектов внутри корзины AWS S3:
aws s3 ls bucket-name --recursive
Эта команда поместит список ALL в корзину AWS S3 ... в текстовый файл в вашем текущем каталоге:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
источник
Для разработчиков Scala здесь это рекурсивная функция для выполнения полного сканирования и отображения содержимого корзины AmazonS3 с использованием официального пакета AWS SDK для Java.
Чтобы вызвать вышеупомянутую
map()
функцию карри , просто передайте уже созданный (и правильно инициализированный) объект AmazonS3Client (см. Официальный AWS SDK для Java API Reference ), имя корзины и имя префикса в первом списке параметров. Также передайте функцию, которуюf()
вы хотите применить для сопоставления каждой сводки объекта во втором списке параметров.Например
вернет полный список
(key, owner)
кортежей в этом сегменте / префиксеили
как вы обычно подходите к монадам в функциональном программировании
источник
mapped.toList
без какого-либо из предыдущихacc
Есть несколько способов сделать это. Использование Python
Другой способ - использовать для этого AWS cli
источник
s3 = boto3.resource('s3')
session
методе.AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
После zach я бы тоже порекомендовал boto , но мне нужно было немного изменить его код:
источник
conn.lookup
возвращаетсяNone
вместо того, чтобыS3ResponseError(NoSuchBucket)
Для получения дополнительной информации см. Здесь - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html.
источник
aws s3api list-objects --bucket <bucket-name>
Для boto3 Python после использования
aws configure
:источник
Сначала убедитесь , что вы находитесь на
instance terminal
и у вас естьall access
изS3
вIAM
использовании. Например, я использовал экземпляр ec2.Затем настройте AWS
Затем заполните документы ex: -
Теперь смотрите все ведра
Хранить все ведра имя
Посмотреть всю структуру файлов в ведре
Хранить файловую структуру в каждом сегменте
Надеюсь это поможет.
источник
AWS CLI позволяет быстро просматривать все файлы корзины S3 и помогает выполнять другие операции.
Чтобы использовать AWS CLI, выполните следующие действия:
Чтобы увидеть все файлы корзины S3, используйте команду
aws s3 ls s3: // your_bucket_name --recursive
Ссылка на использование AWS cli для различных сервисов AWS: https://docs.aws.amazon.com/cli/latest/reference/
источник
В Java вы можете получить ключи, используя ListObjects (см. Документацию AWS )
источник
Код на python с использованием потрясающей "boto" lib . Код возвращает список файлов в сегменте, а также обрабатывает исключения для отсутствующих сегментов.
Не забудьте заменить <PLACE_HOLDERS> вашими значениями.
источник
Приведенная ниже команда получит все имена файлов из вашей корзины AWS S3 и запишет в текстовый файл в вашем текущем каталоге:
источник
В качестве альтернативы вы можете использовать Minio Client aka mc. Его открытый исходный код и совместим с AWS S3. Он доступен для Linux, Windows, Mac, FreeBSD.
Все, что вам нужно сделать, это запустить команду mc ls для просмотра содержимого.
Примечание:
Установка Minio Client Linux Скачать mc для:
Настройка учетных данных AWS с помощью клиента Minio
Примечание. Пожалуйста, замените mys3 псевдонимом, который вы хотели бы использовать для этой учетной записи, и BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 на AWS ACCESS-KEY и SECRET-KEY.
Надеюсь, поможет.
Отказ от ответственности: я работаю на Minio
источник
Вы можете использовать стандартный API S3 -
источник
Вы можете перечислить все файлы в ведре aws s3, используя команду
и чтобы сохранить его в файле, используйте
если вы хотите добавить свой результат в файл иначе:
если вы хотите очистить то, что было написано ранее.
Это будет работать как в Windows, так и в Linux.
источник
В JavaScript вы можете использовать
s3.listObjects (params, function (err, result) {});
чтобы получить все объекты внутри ведра. Вы должны передать имя корзины внутри параметров (Bucket: name) .
источник
источник
источник
Упрощенная и обновленная версия ответа Scala от Paolo:
Удаление обобщенных элементов и использование ListObjectRequest, созданного строителями SDK.
источник
источник
В PHP вы можете получить полный список объектов AWS-S3 внутри определенного сегмента, используя следующий вызов
Вы можете перенаправить вывод вышеуказанного кода в файл, чтобы получить список ключей.
источник
Используйте plumbum, чтобы обернуть cli, и у вас будет четкий синтаксис:
источник
пожалуйста, попробуйте этот скрипт bash. он использует команду curl без каких-либо внешних зависимостей
источник
Самый простой способ получить очень удобный текстовый файл - это загрузить S3 Browser http://s3browser.com/ и использовать Генератор веб-URL для получения списка полных путей ссылки. Это очень удобно и занимает около 3 кликов.
Удачи вам.
источник