मेरे पास एक अमेज़ॅन s3 बाल्टी है जिसमें दसियों हज़ार फ़ाइलनाम हैं। बाल्टी में सभी फ़ाइलनामों को सूचीबद्ध करने वाली पाठ फ़ाइल प्राप्त करने का सबसे आसान तरीका क्या है?
मेरे पास एक अमेज़ॅन s3 बाल्टी है जिसमें दसियों हज़ार फ़ाइलनाम हैं। बाल्टी में सभी फ़ाइलनामों को सूचीबद्ध करने वाली पाठ फ़ाइल प्राप्त करने का सबसे आसान तरीका क्या है?
जवाबों:
मैं बोटो का उपयोग करने की सलाह दूंगा । फिर यह अजगर की पंक्तियों की एक त्वरित जोड़ी है :
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')
इसे लिस्टहोम के रूप में सहेजें, एक टर्मिनल खोलें, और फिर चलाएं:
$ python list.py > results.txt
आर 3 ss के लिए प्रलेखन
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
निर्दिष्ट निर्देशिका के तहत सभी वस्तुओं को देखने के लिए ध्वज जोड़ें
s3cmd इस तरह की चीज के लिए अमूल्य है
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
s3cmd
तिथि के अनुसार छांटे गए फ़ाइलनामों को लौटाता है। क्या कोई ऐसा तरीका है जिससे मैं यह कह सकूं कि केवल उन्हीं फाइलों को कहा जाए जिन्हें बाद में जोड़ा गया है 2015-10-23 20:46
?
केयरफुल बनें, अमेजन लिस्ट में केवल 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
समाप्त
आशा है कि यह मदद करता है, विन्सेन्ट
अपडेट 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 बाल्टी के अंदर सभी की एक सूची देगा ... आपकी वर्तमान निर्देशिका में एक पाठ फ़ाइल के अंदर:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
स्काला डेवलपर्स के लिए, यहां एक पूर्ण स्कैन निष्पादित करने और जावा के लिए आधिकारिक AWS SDK का उपयोग करके 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 एसडीके का संदर्भ ), बाल्टी नाम और पहले पैरामीटर सूची में उपसर्ग नाम को पास करें। साथ ही फंक्शन पास करेंf()
आप प्रत्येक ऑब्जेक्ट सारांश को दूसरे पैरामीटर सूची में मैप करने के लिए लागू करना चाहते हैं।
उदाहरण के लिए
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
(key, owner)
उस बाल्टी / उपसर्ग में tuples की पूरी सूची लौटाएगा
या
map(s3, "bucket", "prefix")(s => println(s))
जैसा कि आप सामान्य रूप से कार्यात्मक प्रोग्रामिंग में मोनाड्स से संपर्क करेंगे
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 क्ली का उपयोग कर रहा है
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']
जाच के बाद मैं भी बोटो की सिफारिश करूंगा , लेकिन मुझे उनके कोड में थोड़ा बदलाव करने की जरूरत है:
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 configure
फिर आउटसीडेंटियल पूर्व भरें: -
$ 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 सीएलआई का उपयोग करने के लिए नीचे दिए गए चरणों का पालन करें:
S3 बाल्टी उपयोग कमांड की सभी फाइलों को देखने के लिए
aws s3 ss s3: // your_bucket_name --recursive
विभिन्न एडब्ल्यूएस सेवाओं के लिए एडब्ल्यूएस क्ली का उपयोग करने का संदर्भ: 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());
भयानक "बोटो" का उपयोग करके अजगर में कोड । कोड एक बाल्टी में फाइलों की एक सूची देता है और लापता बाल्टियों के अपवादों को भी संभालता है।
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> को बदलना न भूलें।
नीचे दिए गए आदेश को आपके एडब्ल्यूएस एस 3 बाल्टी से सभी फ़ाइल नाम मिलेंगे और अपनी वर्तमान निर्देशिका में पाठ फ़ाइल में लिखेंगे:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
वैकल्पिक रूप से आप Minio Client aka mc का उपयोग कर सकते हैं। इसका ओपन सोर्स और AWS S3 के साथ संगत है। यह लिनक्स, विंडोज, मैक, फ्रीबीएसडी के लिए उपलब्ध है।
आपको बस इतना करना है कि सामग्री को सूचीबद्ध करने के लिए mc ls कमांड चलाना है ।
$ m 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
ध्यान दें:
निम्न के लिए मिनिओ क्लाइंट लिनक्स डाउनलोड एमसी को स्थापित करना :
$ chmod 755 mc $ ./mc --help
मिनियो क्लाइंट के साथ AWS क्रेडेंशियल सेट करना
$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSS525Q9GSrr12
नोट: कृपया mys3 को उस खाते से बदल दें, जिसे आप इस खाते के लिए चाहते हैं और BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSHx5ohQ9GSrr12 पर अपने AWS ACCESS-KEY और SECRET-KEY के साथ
आशा करता हूँ की ये काम करेगा।
आप कमांड का उपयोग करके a3 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
यदि आप स्पष्ट करना चाहते हैं कि पहले क्या लिखा गया था।
यह विंडोज़ और लिनक्स दोनों में काम करेगा।
जावास्क्रिप्ट में आप उपयोग कर सकते हैं
s3.listObjects (params, function (इरेट, परिणाम) {});
बाल्टी के अंदर सभी वस्तुओं को पाने के लिए। आपको पैरामेट्स के अंदर बकेट का नाम देना होगा (बकेट: नाम) ।
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}'
पाओलो द्वारा स्काला के उत्तर का सरलीकृत और अद्यतन संस्करण:
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'];
}
आप कुंजी की सूची प्राप्त करने के लिए एक फ़ाइल में उपरोक्त कोड के आउटपुट को रीडायरेक्ट कर सकते हैं।
लिपटी को लपेटने के लिए प्लंबम का उपयोग करें और आपके पास एक स्पष्ट वाक्यविन्यास होगा:
import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
कृपया इस बैश स्क्रिप्ट को आज़माएं। यह कर्ल कमांड का उपयोग करता है, जिसमें किसी बाहरी निर्भरता की आवश्यकता नहीं होती है
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
प्रश्न में उल्लिखित "दसियों हज़ारों फ़ाइलनाम" स्थिति को संबोधित करता है।