У меня есть ведро amazon s3, в котором есть десятки тысяч имен файлов. Какой самый простой способ получить текстовый файл, в котором перечислены все имена файлов в ведре?
Быстрый способ перечислить все файлы в корзине Amazon S3?
Ответ 1
Я бы рекомендовал использовать boto. Затем это быстро пара строк питона:
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
Ответ 2
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
Это покажет вам все ваши файлы.
Ответ 3
s3cmd бесценен для такого рода вещей
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
Ответ 4
Будьте осторожны, список 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
конец
Надеюсь, это поможет, Винсент
Ответ 5
Для разработчиков 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))
}
Чтобы вызвать вышеупомянутую функцию curried map()
, просто передайте уже построенный (и правильно инициализированный) объект AmazonS3Client (обратитесь к официальному AWS SDK для Java API Ссылка), имя ведра и имя префикса в списке первых параметров. Также передайте функцию f()
, которую вы хотите применить, для сопоставления всех сводок объектов во втором списке параметров.
Например
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
вернет полный список кортежей (key, owner)
в этом ведре/префиксе
или
map(s3, "bucket", "prefix")(s => println(s))
как вы обычно подходите Monads в функциональном программировании
Ответ 6
Обновление 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
Ответ 7
После zach я также рекомендовал boto, но мне нужно было внести небольшой вклад в его код:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
Ответ 8
aws s3api list-objects --bucket bucket-name
Для получения дополнительной информации см. Здесь - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html.
Ответ 9
Есть несколько способов сделать это. Использование 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
Ответ 10
Код в python с помощью awesome "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 exception
return [ key.name.encode( "utf-8" ) for key in bucket.list() ]
Не забудьте заменить < PLACE_HOLDERS > с вашими значениями.
Ответ 11
В Java вы можете получить ключи, используя ListObjects (см. Документацию AWS)
FileWriter fileWriter;
BufferedWriter bufferedWriter;
// [...]
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("myprefix");
ObjectListing objectListing;
do {
objectListing = s3client.listObjects(listObjectsRequest);
for (S3ObjectSummary objectSummary :
objectListing.getObjectSummaries()) {
// write to file with e.g. a bufferedWriter
bufferedWriter.write(objectSummary.getKey());
}
listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
Ответ 12
Приведенная ниже команда получит все имена файлов из вашей корзины AWS S3 и запишет в текстовый файл в вашем текущем каталоге:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
Ответ 13
Для Python Boto3 после использования aws configure
:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('name')
for obj in bucket.objects.all():
print(obj.key)
Ответ 14
function showUploads(){
if (!class_exists('S3')) require_once 'S3.php';
// AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', '234567665464tg');
if (!defined('awsSecretKey')) define('awsSecretKey', 'dfshgfhfghdgfhrt463457');
$bucketName = 'my_bucket1234';
$s3 = new S3(awsAccessKey, awsSecretKey);
$contents = $s3->getBucket($bucketName);
echo "<hr/>List of Files in bucket : {$bucketName} <hr/>";
$n = 1;
foreach ($contents as $p => $v):
echo $p."<br/>";
$n++;
endforeach;
}
Ответ 15
Вы можете использовать стандартный s3 api -
aws s3 ls s3://root/folder1/folder2/
Ответ 16
public static Dictionary<string, DateTime> ListBucketsByCreationDate(string AccessKey, string SecretKey)
{
return AWSClientFactory.CreateAmazonS3Client(AccessKey,
SecretKey).ListBuckets().Buckets.ToDictionary(s3Bucket => s3Bucket.BucketName,
s3Bucket => DateTime.Parse(s3Bucket.CreationDate));
}
Ответ 17
В PHP вы можете получить полный список объектов AWS-S3 внутри определенного сегмента, используя следующий вызов
$S3 = \Aws\S3\S3Client::factory(array('region' => $region,));
$iterator = $S3->getIterator('ListObjects', array('Bucket' => $bucket));
foreach ($iterator as $obj) {
echo $obj['Key'];
}
Вы можете перенаправить вывод приведенного выше кода в файл, чтобы получить список ключей.
Ответ 18
В качестве альтернативы вы можете использовать Minio Client aka mc. Его Open Source и совместимый с AWS S3. Он доступен для Linux, Windows, Mac, FreeBSD.
Все, что вам нужно сделать, - запустить команду mc ls для перечисления содержимого.
$ mc ls s3/kline/ [2016-04-30 13:20:47 IST] 1.1MiB 1.jpg [2016-04-30 16:03:55 IST] 7.5KiB docker.png [2016-04-30 15:16:17 IST] 50KiB pi.png [2016-05-10 14:34:39 IST] 365KiB upton.pdf
Примечание:
- s3: Псевдоним для Amazon S3
- kline: имя ведра AWS S3
Установка Minio Client Linux Загрузить mc для:
- 64-разрядная версия Intel от https://dl.minio.io/client/mc/release/linux-amd64/mc
- 32-разрядная версия Intel от https://dl.minio.io/client/mc/release/linux-386/mc
- 32-битная ARM из https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod 755 mc $ ./mc --help
Настройка учетных данных AWS с помощью Minio Client
$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Примечание. Пожалуйста, замените mys3 псевдонимами, которые вы хотели бы использовать для этой учетной записи, и BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 с вашим AWS ACCESS-KEY и SECRET-KEY
Надеюсь, что это поможет.
Отказ от ответственности: я работаю для Minio
Ответ 19
Вы можете перечислить все файлы в ведро aws s3 с помощью команды
aws s3 ls path/to/file
и сохранить его в файле, используйте
aws s3 ls path/to/file >> save_result.txt
если вы хотите добавить результат в файл в противном случае:
aws s3 ls path/to/file > save_result.txt
если вы хотите очистить то, что было написано ранее.
Он будет работать как в Windows, так и в Linux.
Ответ 20
Упрощенная и обновленная версия ответа Scala от Paolo:
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.model.{ListObjectsRequest, ObjectListing, S3ObjectSummary}
def buildListing(s3: AmazonS3, request: ListObjectsRequest): List[S3ObjectSummary] = {
def buildList(listIn: List[S3ObjectSummary], bucketList:ObjectListing): List[S3ObjectSummary] = {
val latestList: List[S3ObjectSummary] = bucketList.getObjectSummaries.toList
if (!bucketList.isTruncated) listIn ::: latestList
else buildList(listIn ::: latestList, s3.listNextBatchOfObjects(bucketList))
}
buildList(List(), s3.listObjects(request))
}
Удаление обобщенных элементов и использование ListObjectRequest, созданного строителями SDK.
Ответ 21
# find like file listing for s3 files
aws s3api --profile <<profile-name>> \
--endpoint-url=<<end-point-url>> list-objects \
--bucket <<bucket-name>> --query 'Contents[].{Key: Key}'
Ответ 22
В JavaScript вы можете использовать
s3.listObjects(params, function (err, result) {});
чтобы получить все объекты внутри ведра. Вы должны передать имя контейнера внутри параметров (Bucket: name).
Ответ 23
Используйте plumbum, чтобы обернуть cli, и у вас будет четкий синтаксис:
import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
Ответ 24
AWS CLI позволяет быстро просматривать все файлы корзины S3 и помогает выполнять другие операции.
Чтобы использовать AWS CLI, выполните следующие действия:
- Установите AWS CLI.
- Настройте интерфейс командной строки AWS для использования учетных данных безопасности по умолчанию и региона AWS по умолчанию.
-
Чтобы увидеть все файлы корзины S3, используйте команду
aws s3 ls s3://your_bucket_name --recursive
Ссылка на использование AWS cli для различных сервисов AWS: https://docs.aws.amazon.com/cli/latest/reference/
Ответ 25
Самый простой способ получить очень удобный текстовый файл - это загрузить S3 Browser http://s3browser.com/ и использовать Генератор веб-URL для получения списка полных путей ссылки. Это очень удобно и занимает около 3 кликов.
-Browse to Folder
-Select All
-Generate Urls
Удачи вам.