快速列出Amazon S3存储桶中的所有文件?

我有一个amazon s3桶,其中有数以万计的文件名。 获取一个列出桶中所有文件名的文本文件的最简单方法是什么?

我build议使用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,打开一个terminal,然后运行:

 $ python list.py > results.txt 

s3cmd对于这种事情是无价的

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

AWS CLI

aws s3 ls的文档

AWS最近发布了他们的命令行工具。 这与boto非常相似,可以使用sudo easy_install awsclisudo 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 

这会显示你所有的文件。

小心,亚马逊列表只返回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 

结束

希望这有助于,文森特

对于Scala开发人员来说,这是一个recursion函数,可以执行完整扫描,并使用官方适用于Java的AWS开发工具包 映射 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)) } 

要调用上面的curried map()函数,只需将已构build的(并正确初始化的)AmazonS3Client对象(请参阅官方AWS SDK for Java API参考 )传递给第一个参数列表中的存储桶名称和前缀名称即可。 还要传递您想要应用的函数f()来映射第二个参数列表中的每个对象摘要。

例如

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

将返回该桶/前缀中的(key, owner)元组的完整列表

要么

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

就像Monads在函数式编程中通常所做的那样

zach之后,我也会推荐boto ,但是我需要对他的代码做些微小的改动 :

 conn = boto.connect_s3('access-key', 'secret'key') bucket = conn.lookup('bucket-name') for key in bucket: print key.name 

更新20-12-2016:

这个命令会给你一个在AWS S3中的所有桶的列表:

aws s3 ls

此命令将为您提供AWS S3存储桶内的所有列表:

aws s3 ls bucket-name

此命令将把所有AWS S3存储桶内的所有列表放入当前目录中的文本文件中:

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

 aws s3api list-objects --bucket bucket-name 

有关更多详细信息,请参阅此处 – http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html

在python中使用真棒“boto”lib的代码 。 该代码返回一个桶中的文件列表,并处理丢失桶的exception。

 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() ] 

不要忘记用您的值replace<PLACE_HOLDERS>。

 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; } 

在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 eg a bufferedWriter bufferedWriter.write(objectSummary.getKey()); } listObjectsRequest.setMarker(objectListing.getNextMarker()); } while (objectListing.isTruncated()); 

你可以使用标准的S3 API –

 aws s3 ls s3://root/folder1/folder2/ 
 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)); } 

在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']; } 

您可以将上述代码的输出redirect到一个文件中以获取密钥列表。

另外,你也可以使用Minio Client aka mc。 其开放源代码并与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 for:

 $ chmod 755 mc
 $ ./mc --help

使用Minio Client设置AWS凭证

 $ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12

注意:请将mys3replace为您希望用于此帐户的别名,并将您的AWS ACCESS-KEY和SECRET-KEYreplace为BKIKJAA5BMMU2RHO6IBB,V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12

希望它有帮助。

免责声明:我为Minio工作

您可以使用该命令列出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中工作。

Paolo简化和更新的Scala答案:

 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)) } 

剥离generics并使用由SDK构build器生成的ListObjectRequest。