web-dev-qa-db-ja.com

Amazon S3バケット内のすべてのファイルをリストする簡単な方法は?

数万のファイル名を持つAmazon s3バケットがあります。バケット内のすべてのファイル名をリストしたテキストファイルを取得する最も簡単な方法は何ですか?

131
Steve

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
114
Zachary Ozer

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

これにより、すべてのファイルが表示されます。

50
Layke

s3cmd はこの種のものにとって非常に貴重です

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

42
mat kelcey

Amazonリストは1000個のファイルのみを返すことに注意してください。すべてのファイルを反復処理する場合は、マーカーを使用して結果をページ分割する必要があります。

Rubyで aws-s を使用

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

終わり

これが役に立てば幸いです

32
vdaubry

2019年2月15日更新:

このコマンドにより、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

16

Scala開発者の場合、ここではfull scanとmapを使用して、公式の AWS SDK for 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 for Java AP​​I Reference を参照)、最初のパラメーターリストのバケット名とプレフィックス名。また、2番目のパラメーターリストの各オブジェクトの概要をマップするために適用する関数f()を渡します。

例えば

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

そのバケット/プレフィックスの(key, owner)タプルの完全なリストを返します

または

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

通常は 関数型プログラミングのモナド でアプローチします

12

あなたはそれについて行くことができるいくつかの方法があります。 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
7
Mahesh Mogal
aws s3api list-objects --bucket bucket-name

詳細については、こちらを参照してください- http://docs.aws.Amazon.com/cli/latest/reference/s3api/list-objects.html

7
sysuser

ザックの後、 boto もお勧めしますが、彼のコードにわずかな違いを加える必要がありました。

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

AWS CLIを使用すると、S3バケットのすべてのファイルをすばやく表示でき、他の操作も実行できます。

AWS CLIを使用するには、次の手順に従います。

  1. インストール AWS CLI。
  2. Configure デフォルトのセキュリティ認証情報とデフォルトのAWSリージョンを使用するためのAWS CLI。
  3. S3バケットのすべてのファイルを表示するには、コマンドを使用します

    aws s3 ls s3:// your_bucket_name --recursive

さまざまなAWSサービスにAWS cliを使用するためのリファレンス: https://docs.aws.Amazon.com/cli/latest/reference/

3
singh30

Javaでは、ListObjectsを使用してキーを取得できます( AWS documentation を参照)

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());
3
H6.

aws configureを使用した後のPythonのboto3の場合:

import boto3
s3 = boto3.resource('s3')

bucket = s3.Bucket('name')
for obj in bucket.objects.all():
    print(obj.key)
3
André

すばらしい "boto" lib を使用してpythonのコードを作成します。このコードは、バケット内のファイルのリストを返し、見つからないバケットの例外も処理します。

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>を実際の値に置き換えることを忘れないでください。

2
Oran

以下のコマンドは、AWS S3バケットからすべてのファイル名を取得し、現在のディレクトリのテキストファイルに書き込みます。

aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
2

標準のs3 APIを使用できます-

aws s3 ls s3://root/folder1/folder2/
1
Nrj

次のコマンドを使用して、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の両方で動作します。

1
Aklank Jain
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;
}
1

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

ジェネリックを取り除き、SDKビルダーによって生成されたListObjectRequestを使用します。

0
wildgooze

または、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のダウンロード:

 $ chmod 755 mc 
 $ ./mc --help 

MinioクライアントでのAWS認証情報のセットアップ

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

注:mys3をこのアカウント用のエイリアスに置き換え、BKIKJAA5BMMU2RHO6IBB、V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12をAWS ACCESS-KEYおよびSECRET-KEYに置き換えてください

それが役に立てば幸い。

免責事項:私は Minio で働いています

0
koolhead17
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));

}
0
user1172192

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

上記のコードの出力をファイルにリダイレクトして、キーのリストを取得できます。

0
# 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}'
0
Yordan Georgiev

Plumbumを使用してcliをラップすると、明確な構文が得られます。

import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
0
JaviOverflow

Javascriptで使用できます

s3.listObjects(params、function(err、result){});

バケット内のすべてのオブジェクトを取得します。 params(Bucket:name)内にバケット名を渡す必要があります。

0