답변:
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
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
모든 파일이 표시됩니다.
--recursive
지정된 디렉토리 아래의 모든 객체를 보려면 플래그를 추가하십시오.
아마존 목록은 1000 개의 파일 만 반환합니다. 모든 파일을 반복하려면 마커를 사용하여 결과를 페이지 매김해야합니다.
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
종료
이게 도움이 되길 바래, 빈센트
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
스칼라 개발자 에게는 공식 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))
}
위의 커리 map()
함수 를 호출하려면 첫 번째 파라미터 목록에서 이미 생성 된 (및 올바르게 초기화 된) AmazonS3Client 객체 (공식 AWS SDK for Java API Reference 참조 ), 버킷 이름 및 접두사 이름을 전달하면됩니다. 또한 f()
적용하려는 함수 를 전달하여 두 번째 매개 변수 목록에서 각 객체 요약을 매핑합니다.
예를 들어
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
(key, owner)
해당 버킷 / 접두사 에 튜플 의 전체 목록을 반환합니다.
또는
map(s3, "bucket", "prefix")(s => println(s))
함수형 프로그래밍에서 Monads 가 일반적으로 접근하는 것처럼
mapped.toList
이전의 것 없이 반환됩니다acc
당신이 그것에 대해 갈 수있는 몇 가지 방법이 있습니다. 파이썬 사용하기
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
s3 = boto3.resource('s3')
session
메소드 에서 변수를 사용할 필요가 없습니다 . AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
zach 후 boto 도 추천 하지만 그의 코드와 약간의 차이를 만들어야했습니다.
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
conn.lookup
반환 None
대신에 던지는 S3ResponseError(NoSuchBucket)
오류
aws s3api list-objects --bucket bucket-name
자세한 내용은 여기를 참조하십시오 -http : //docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
aws s3api list-objects --bucket <bucket-name>
먼저 메이크업 확실히 당신은에있는 instance terminal
그리고 당신은 all access
의 S3
에 IAM
사용된다. 예를 들어 ec2 인스턴스를 사용했습니다.
pip3 install awscli
그런 다음 AWS 구성
aws configure
그런 다음 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)
이제 모든 버킷보기
aws s3 ls
모든 버킷 이름 저장
aws s3 ls > output.txt
버킷의 모든 파일 구조보기
aws s3 ls bucket-name --recursive
각 버킷에 파일 구조 저장
aws s3 ls bucket-name --recursive > file_Structure.txt
도움이 되었기를 바랍니다.
AWS CLI를 사용하면 S3 버킷의 모든 파일을 빠르게 볼 수 있으며 다른 작업도 수행 할 수 있습니다.
AWS CLI를 사용하려면 다음 단계를 따르십시오.
S3 버킷의 모든 파일을 보려면 명령을 사용하십시오.
AWS s3 ls s3 : // your_bucket_name-재귀
다양한 AWS 서비스에 AWS cli 사용에 대한 참조 : https://docs.aws.amazon.com/cli/latest/reference/
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());
멋진 "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>를 값으로 바꾸는 것을 잊지 마십시오.
아래 명령은 AWS S3 버킷에서 모든 파일 이름을 가져와 현재 디렉토리의 텍스트 파일에 씁니다.
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
또는 Minio Client (일명 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
노트 :
Minio Client Linux 설치 다음을 위한 mc 다운로드 :
chmod 755mc $ ./mc --help
Minio Client를 사용하여 AWS 자격 증명 설정
$ mc 구성 호스트 추가 mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
참고 : mys3을이 계정에 대해 원하는 별칭으로 바꾸고 BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12를 AWS ACCESS-KEY 및 SECRET-KEY로 바꾸십시오.
도움이 되길 바랍니다.
자바 스크립트에서 사용할 수 있습니다
s3.listObjects (매개 변수, 함수 (오류, 결과) {});
버킷 내부의 모든 객체를 가져옵니다. params (Bucket : name) 안에 버킷 이름을 전달해야합니다 .
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;
}
# 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}'
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를 사용하십시오.
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'];
}
위 코드의 출력을 파일로 리디렉션하여 키 목록을 가져올 수 있습니다.
plumbum을 사용하여 cli를 감싸면 명확한 구문이 있습니다.
import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
이 bash 스크립트를 사용해보십시오. 외부 의존성이 필요없는 curl 명령을 사용합니다.
bucket=<bucket_name>
region=<region_name>
awsAccess=<access_key>
awsSecret=<secret_key>
awsRegion="${region}"
baseUrl="s3.${awsRegion}.amazonaws.com"
m_sed() {
if which gsed > /dev/null 2>&1; then
gsed "$@"
else
sed "$@"
fi
}
awsStringSign4() {
kSecret="AWS4$1"
kDate=$(printf '%s' "$2" | openssl dgst -sha256 -hex -mac HMAC -macopt "key:${kSecret}" 2>/dev/null | m_sed 's/^.* //')
kRegion=$(printf '%s' "$3" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kDate}" 2>/dev/null | m_sed 's/^.* //')
kService=$(printf '%s' "$4" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kRegion}" 2>/dev/null | m_sed 's/^.* //')
kSigning=$(printf 'aws4_request' | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kService}" 2>/dev/null | m_sed 's/^.* //')
signedString=$(printf '%s' "$5" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kSigning}" 2>/dev/null | m_sed 's/^.* //')
printf '%s' "${signedString}"
}
if [ -z "${region}" ]; then
region="${awsRegion}"
fi
# Initialize helper variables
authType='AWS4-HMAC-SHA256'
service="s3"
dateValueS=$(date -u +'%Y%m%d')
dateValueL=$(date -u +'%Y%m%dT%H%M%SZ')
# 0. Hash the file to be uploaded
# 1. Create canonical request
# NOTE: order significant in ${signedHeaders} and ${canonicalRequest}
signedHeaders='host;x-amz-content-sha256;x-amz-date'
canonicalRequest="\
GET
/
host:${bucket}.s3.amazonaws.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:${dateValueL}
${signedHeaders}
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
# Hash it
canonicalRequestHash=$(printf '%s' "${canonicalRequest}" | openssl dgst -sha256 -hex 2>/dev/null | m_sed 's/^.* //')
# 2. Create string to sign
stringToSign="\
${authType}
${dateValueL}
${dateValueS}/${region}/${service}/aws4_request
${canonicalRequestHash}"
# 3. Sign the string
signature=$(awsStringSign4 "${awsSecret}" "${dateValueS}" "${region}" "${service}" "${stringToSign}")
# Upload
curl -g -k "https://${baseUrl}/${bucket}" \
-H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
-H "x-amz-Date: ${dateValueL}" \
-H "Authorization: ${authType} Credential=${awsAccess}/${dateValueS}/${region}/${service}/aws4_request,SignedHeaders=${signedHeaders},Signature=${signature}"
매우 유용한 텍스트 파일을 얻는 가장 쉬운 방법은 S3 브라우저 http://s3browser.com/ 을 다운로드 하고 웹 URL 생성기를 사용하여 전체 링크 경로 목록을 생성하는 것입니다. 매우 편리하며 약 3 회의 클릭이 포함됩니다.
-Browse to Folder
-Select All
-Generate Urls
행운을 빈다
boto.s3.bucketlistresultset.BucketListResultSet
언급 한 바와 같이, 질문에 언급 된 "수만 개의 파일 이름"조건을 다룹니다.