Быстрый способ перечислить все файлы в корзине Amazon S3? - PullRequest
125 голосов
/ 26 июля 2010

У меня есть амазонка s3, в которой хранятся десятки тысяч имен файлов. Какой самый простой способ получить текстовый файл, в котором перечислены все имена файлов в корзине?

Ответы [ 25 ]

114 голосов
/ 27 июля 2010

Я бы порекомендовал использовать boto .Тогда это быстрая пара строк Python :

from boto.s3.connection import S3Connection

conn = S3Connection('access-key','secret-access-key')
bucket = conn.get_bucket('bucket')
for key in bucket.list():
    print key.name.encode('utf-8')

Сохраните это как list.py, откройте терминал и затем выполните:

$ python list.py > results.txt
48 голосов
/ 12 сентября 2013

AWS CLI

Документация для aws s3 ls

AWS недавно выпустила свои инструменты командной строки. Это работает так же, как boto и может быть установлен с помощью sudo easy_install awscli или sudo pip install awscli

После установки вы можете просто запустить

aws s3 ls

Который покажет вам все ваши доступные корзины

CreationTime Bucket
       ------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2

Затем вы можете запросить определенное ведро для файлов.

Команда

aws s3 ls s3://mybucket

выход

Bucket: mybucket
Prefix:

      LastWriteTime     Length Name
      -------------     ------ ----
                           PRE somePrefix/
2013-07-25 17:06:27         88 test.txt

Это покажет вам все ваши файлы.

42 голосов
/ 23 февраля 2012

s3cmd неоценим для такого рода вещей

$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket

32 голосов
/ 08 марта 2012

Будьте осторожны, список amazon возвращает только 1000 файлов.Если вы хотите перебрать все файлы, вы должны разбить результаты на страницы, используя маркеры:

В рубине, используя aws-s3

bucket_name = 'yourBucket'
marker = ""

AWS::S3::Base.establish_connection!(
  :access_key_id => 'your_access_key_id',
  :secret_access_key => 'your_secret_access_key'
)

loop do
  objects = Bucket.objects(bucket_name, :marker=>marker, :max_keys=>1000)
  break if objects.size == 0
  marker = objects.last.key

  objects.each do |obj|
      puts "#{obj.key}"
  end
end

end

Надеюсь, это поможет, Винсент

15 голосов
/ 20 декабря 2016

Обновление 15-02-2019:

Эта команда предоставит вам список всех сегментов в AWS S3:

aws s3 ls

Эта команда предоставит вам список всех объектов верхнего уровня внутри корзины AWS S3:

aws s3 ls bucket-name

Эта команда выдаст вам список ВСЕХ объектов внутри корзины AWS S3:

aws s3 ls bucket-name --recursive

Эта команда поместит списокВСЕ внутри корзины AWS S3 ... внутри текстового файла в вашем текущем каталоге:

aws s3 ls bucket-name --recursive | cat >> file-name.txt

12 голосов
/ 05 июня 2014

Для разработчиков Scala здесь это рекурсивная функция для выполнения полного сканирования и сопоставления содержимого корзины AmazonS3 с использованием официального AWS SDK для Java

import com.amazonaws.services.s3.AmazonS3Client
import com.amazonaws.services.s3.model.{S3ObjectSummary, ObjectListing, GetObjectRequest}
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}

def map[T](s3: AmazonS3Client, bucket: String, prefix: String)(f: (S3ObjectSummary) => T) = {

  def scan(acc:List[T], listing:ObjectListing): List[T] = {
    val summaries = asScala[S3ObjectSummary](listing.getObjectSummaries())
    val mapped = (for (summary <- summaries) yield f(summary)).toList

    if (!listing.isTruncated) mapped.toList
    else scan(acc ::: mapped, s3.listNextBatchOfObjects(listing))
  }

  scan(List(), s3.listObjects(bucket, prefix))
}

Чтобы вызвать вышеупомянутую каррированную функцию map(), просто передайте уже созданный (и правильно инициализированный) объект AmazonS3Client (см. Официальный AWS SDK для Java API Reference ), имя корзины и префикс имя в первом списке параметров. Также передайте функцию f(), которую вы хотите применить для сопоставления каждой сводки объекта во втором списке параметров.

Например

val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))

вернет полный список (key, owner) кортежей в этом сегменте / префиксе

или

map(s3, "bucket", "prefix")(s => println(s))

как вы обычно подходите к Монадам в функциональном программировании

7 голосов
/ 19 апреля 2011

После зак я бы тоже порекомендовал boto , но мне нужно было немного изменить его код:

conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
    print key.name
7 голосов
/ 22 марта 2016
aws s3api list-objects --bucket bucket-name

Подробнее см. Здесь - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html

6 голосов
/ 05 мая 2018

Есть несколько способов сделать это.Использование Python

import boto3

sesssion = boto3.Session(aws_access_key_id, aws_secret_access_key)

s3 = sesssion.resource('s3')

bucketName = 'testbucket133'
bucket = s3.Bucket(bucketName)

for obj in bucket.objects.all():
    print(obj.key)

Другой способ - использовать для него AWS cli

aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133
3 голосов
/ 04 мая 2019

AWS CLI позволяет быстро просматривать все файлы корзины S3 и помогает выполнять другие операции.

Чтобы использовать AWS CLI, выполните следующие действия:

  1. Установка AWS CLI.
  2. Настройка AWS CLI для использования учетных данных безопасности по умолчанию и региона AWS по умолчанию.
  3. Чтобы увидеть все файлы корзины S3, используйте команду

    aws s3 ls s3: // your_bucket_name --recursive

Ссылка на использование AWS cli для различных сервисов AWS: https://docs.aws.amazon.com/cli/latest/reference/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...