我有一个亚马逊s3桶,里面有成千上万的文件名.获取列出存储桶中所有文件名的文本文件的最简单方法是什么?
Zac*_*zer 115
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')
Run Code Online (Sandbox Code Playgroud)
将其保存为list.py,打开终端,然后运行:
$ python list.py > results.txt
Run Code Online (Sandbox Code Playgroud)
Lay*_*yke 55
AWS最近发布了他们的命令行工具.这很像boto,可以使用sudo easy_install awscli
或安装sudo pip install awscli
安装完成后,您就可以直接运行了
aws s3 ls
Run Code Online (Sandbox Code Playgroud)
这将向您展示所有可用的存储桶
CreationTime Bucket
------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2
Run Code Online (Sandbox Code Playgroud)
然后,您可以在特定存储桶中查询文件.
命令:
aws s3 ls s3://mybucket
Run Code Online (Sandbox Code Playgroud)
输出:
Bucket: mybucket
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE somePrefix/
2013-07-25 17:06:27 88 test.txt
Run Code Online (Sandbox Code Playgroud)
这将显示您的所有文件.
vda*_*bry 34
小心,亚马逊列表只返回1000个文件.如果要迭代所有文件,则必须使用标记对结果进行分页:
在ruby中使用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
Run Code Online (Sandbox Code Playgroud)
结束
希望这会有所帮助,vincent
Kha*_*oui 17
更新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存储桶中放置ALL列表...在当前目录的文本文件中:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
Pao*_*tti 12
对于Scala开发人员,这里使用官方AWS SDK for Java执行完整扫描并映射 AmazonS3存储桶的内容是递归函数
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))
}
Run Code Online (Sandbox Code Playgroud)
要调用上面的curried map()
函数,只需在第一个参数列表中传递已构造的(并且已正确初始化的)AmazonS3Client对象(请参阅官方AWS SDK for Java API Reference),存储桶名称和前缀名称.同时传递f()
要应用的函数以映射第二个参数列表中的每个对象摘要.
例如
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
Run Code Online (Sandbox Code Playgroud)
将返回该(key, owner)
存储桶/前缀中的元组的完整列表
要么
map(s3, "bucket", "prefix")(s => println(s))
Run Code Online (Sandbox Code Playgroud)
正如Monads在函数式编程中通常所采用的那样
在zach之后我也会推荐boto,但我需要对他的代码略有不同:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
Run Code Online (Sandbox Code Playgroud)
aws s3api list-objects --bucket bucket-name
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此处 - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
有几种方法可以解决此问题。使用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)
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用AWS CLI
aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133
Run Code Online (Sandbox Code Playgroud)
对于 Python 的 boto3 使用后aws configure
:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('name')
for obj in bucket.objects.all():
print(obj.key)
Run Code Online (Sandbox Code Playgroud)
首先要确认你是一个instance terminal
和你all access
的S3
在IAM
你使用。例如我使用了一个 ec2 实例。
pip3 install awscli
Run Code Online (Sandbox Code Playgroud)
然后配置aws
aws configure
Run Code Online (Sandbox Code Playgroud)
然后填写 outcredantials 例如:-
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json (or just press enter)
Run Code Online (Sandbox Code Playgroud)
现在,查看所有存储桶
aws s3 ls
Run Code Online (Sandbox Code Playgroud)
存储所有存储桶名称
aws s3 ls > output.txt
Run Code Online (Sandbox Code Playgroud)
查看存储桶中的所有文件结构
aws s3 ls bucket-name --recursive
Run Code Online (Sandbox Code Playgroud)
在每个存储桶中存储文件结构
aws s3 ls bucket-name --recursive > file_Structure.txt
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
归档时间: |
|
查看次数: |
186434 次 |
最近记录: |