আমার কাছে একটি অ্যামাজন এস 3 বালতি রয়েছে যার এতে কয়েক হাজার ফাইল নাম রয়েছে। একটি টেক্সট ফাইল পাওয়ার সবচেয়ে সহজ উপায় কীটি বালতিতে সমস্ত ফাইলের নাম তালিকাভুক্ত করে?
আমার কাছে একটি অ্যামাজন এস 3 বালতি রয়েছে যার এতে কয়েক হাজার ফাইল নাম রয়েছে। একটি টেক্সট ফাইল পাওয়ার সবচেয়ে সহজ উপায় কীটি বালতিতে সমস্ত ফাইলের নাম তালিকাভুক্ত করে?
উত্তর:
আমি বোটো ব্যবহারের পরামর্শ দিই । তারপরে এটি অজগরের এক দ্রুত দু'লাইন :
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 এর জন্য ডকুমেন্টেশন
এডাব্লুএস সম্প্রতি তাদের কমান্ড লাইন সরঞ্জাম প্রকাশ করেছে। এটি অনেকটা বোটোর মতো কাজ করে এবং 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 টি ফাইল আসে। আপনি যদি সমস্ত ফাইলগুলিতে পুনরাবৃত্তি করতে চান তবে আপনাকে চিহ্নিতকারীগুলি ব্যবহার করে ফলাফলগুলি প্যাগিনেট করতে হবে:
রুবিতে আউস-এস 3 ব্যবহার করে
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 আপডেট করুন:
এই কমান্ডটি আপনাকে এডাব্লুএস এস 3 এর সমস্ত বালতির একটি তালিকা দেবে:
aws s3 ls
এই কমান্ডটি আপনাকে এডাব্লুএস এস 3 বাল্টির অভ্যন্তরে সমস্ত শীর্ষ-স্তরের অবজেক্টের একটি তালিকা দেবে:
aws s3 ls bucket-name
এই কমান্ডটি আপনাকে AWS S3 বালতির ভিতরে সমস্ত বস্তুর একটি তালিকা দেবে:
aws s3 ls bucket-name --recursive
এই কমান্ডটি আপনার বর্তমান ডিরেক্টরিতে একটি টেক্সট ফাইলের ভিতরে একটি ডাব্লুএসএস 3 বালতির ভিতরে সমস্তগুলির একটি তালিকা স্থাপন করবে:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
স্কালার বিকাশকারীদের জন্য, এখানে জাভাটির জন্য অফিসিয়াল এডাব্লুএস এসডিকে ব্যবহার করে একটি সম্পূর্ণ স্ক্যান কার্যকর করতে এবং একটি অ্যামাজনএস 3 বালতির সামগ্রীগুলি ম্যাপ করা পুনরাবৃত্ত ফাংশন is
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()
ফাংশনটি শুরু করার জন্য , প্রথম প্যারামিটার তালিকায় বাল্টের নাম এবং উপসর্গের নামটি ইতিমধ্যে নির্মিত (এবং সঠিকভাবে শুরু করা) অ্যামাজনএস 3 ক্লায়েন্ট অবজেক্ট ( জাভা এপিআই রেফারেন্সের জন্য অফিসিয়াল এডাব্লুএস এসডিকে দেখুন), পাসওয়ার্ড করুন । f()
দ্বিতীয় প্যারামিটার তালিকার প্রতিটি বস্তুর সারাংশ ম্যাপ করতে আপনি যে ফাংশনটি প্রয়োগ করতে চান তাও পাশ করুন ।
উদাহরণ স্বরূপ
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
(key, owner)
সেই বালতি / উপসর্গের টিপলগুলির সম্পূর্ণ তালিকা প্রদান করবে
অথবা
map(s3, "bucket", "prefix")(s => println(s))
যেহেতু আপনি সাধারণত ফাংশনাল প্রোগ্রামিংয়ে মনাদদের কাছে যান
mapped.toList
পূর্বের কোনও ছাড়াই ফিরে আসবেacc
এটি সম্পর্কে কয়েকটি উপায় যেতে পারেন ways পাইথন ব্যবহার করা
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 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/references/s3api/list-objects.html
aws s3api list-objects --bucket <bucket-name>
প্রথম নিশ্চিত করুন যে আপনি একটি অন হয় instance terminal
এবং আপনি all access
এর S3
মধ্যে IAM
আপনি ব্যবহার করছেন। উদাহরণস্বরূপ আমি একটি ইসি 2 উদাহরণ ব্যবহার করেছি।
pip3 install awscli
তারপরে aws কনফিগার করুন
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
আশাকরি এটা সাহায্য করবে.
এডাব্লুএস সিএলআই আপনাকে একটি এস 3 বালতির সমস্ত ফাইল দ্রুত দেখতে এবং অন্যান্য ক্রিয়াকলাপ সম্পাদনে সহায়তা করতে পারে।
AWS CLI ব্যবহার করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:
এস 3 বালতি ব্যবহারের কমান্ডের সমস্ত ফাইল দেখতে
এইউএস এস 3 এলএস এস 3: // আপনার_বকেট_নাম - রেকর্ডিভ
বিভিন্ন এডাব্লুএস পরিষেবাগুলির জন্য এডাব্লুএস ক্লায়েন্ট ব্যবহারের রেফারেন্স: https://docs.aws.amazon.com/cli/latest/references/
জাভাতে আপনি তালিকার তালিকা ব্যবহার করে কীগুলি পেতে পারেন (এডাব্লুএস ডকুমেন্টেশন দেখুন )
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> প্রতিস্থাপন করতে ভুলবেন না।
নীচের কমান্ডটি আপনার AWS S3 বালতি থেকে সমস্ত ফাইলের নাম পাবে এবং আপনার বর্তমান ডিরেক্টরিতে টেক্সট ফাইলে লিখবে:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
বিকল্পভাবে আপনি মিনিও ক্লায়েন্ট ওরফে এমসি ব্যবহার করতে পারেন। এটির ওপেন সোর্স এবং এডাব্লুএস এস 3 এর সাথে সামঞ্জস্যপূর্ণ। এটি লিনাক্স, উইন্ডোজ, ম্যাক, ফ্রিবিএসডি-র জন্য উপলব্ধ ।
আপনার যা করতে হবে তা হল বিষয়বস্তু তালিকাভুক্ত করার জন্য এমসি এলএস কমান্ড চালানো ।
c এমসি এলএস এস 3 / কেলাইন / [2016-04-30 13:20:47 IST] 1.1MiB 1.jpg [2016-04-30 16:03:55 IST] 7.5KiB ডকার.png [2016-04-30 15:16:17 IST] 50KiB pi.png [2016-05-10 14:34:39 IST] 365KiB upton.pdf
বিঃদ্রঃ:
মিনিও ক্লায়েন্ট লিনাক্স এমসি ইনস্টল করার জন্য এমসি ডাউনলোড করুন:
$ chmod 755 এমসি $ ./mc - সাহায্য
মিনিও ক্লায়েন্টের সাথে AWS শংসাপত্রগুলি সেট আপ করা হচ্ছে
c এমসি কনফিগার হোস্ট যুক্ত mys3 https://s3.amazonaws.com বিকেআইকেজেএএ 5 বিএমইউ 2 আরএইচবি 6 ভি 1 ফ 1 সিডিউকিউএকিউ 80ueIJEjc5gVQUSSx5ohQ9GSrr12
দ্রষ্টব্য: দয়া করে এই অ্যাকাউন্টের জন্য আপনার পছন্দসই উপন্যাসের সাথে মাই 3 যুক্ত করুন এবং, বিকেআইকেজেএএ 5 বিএমএমইউ 2 আরএইচবি 6 আইবিবি, ভি 7 এফ 1 সিভিকিউএকএকউ 80ইআইজিইজসি 5 জিভিকিউএসএক্স 5 এ কিউ 9 জিএসআর 12 আপনার এডাব্লু এসিসেস-কে এবং সিক্রেট-কে
আশা করি এটা সাহায্য করবে.
কমান্ডটি ব্যবহার করে আউস এস 3 বালতিতে আপনি সমস্ত ফাইল তালিকাভুক্ত করতে পারেন
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 (প্যারামস, ফাংশন (ত্রুটি, ফলাফল) {});
বালতির ভিতরে সমস্ত বস্তু পেতে। আপনাকে বালির নামটি পেরামের ভিতরে দিতে হবে (বালতি: নাম) ।
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))
}
জেনেরিকগুলি ছড়িয়ে দেওয়া এবং এসডিকে বিল্ডারদের দ্বারা উত্পাদিত লিস্টোবজেক্টআরকোয়েস্ট ব্যবহার করা।
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));
}
পিএইচপি-তে আপনি নিম্নলিখিত কলটি ব্যবহার করে নির্দিষ্ট বালতির অভ্যন্তরে 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}"
খুব ব্যবহারযোগ্য টেক্সট ফাইল পাওয়ার সবচেয়ে সহজ উপায় হ'ল এস 3 ব্রাউজারটি ডাউনলোড করুন http://s3browser.com/ এবং সম্পূর্ণ লিঙ্ক পাথের একটি তালিকা তৈরি করতে ওয়েব ইউআরএল জেনারেটর ব্যবহার করুন। এটি খুব সহজ এবং প্রায় 3 টি ক্লিক জড়িত।
-Browse to Folder
-Select All
-Generate Urls
আপনি ভাগ্য ভাল।
boto.s3.bucketlistresultset.BucketListResultSet
, প্রশ্নের মধ্যে উল্লিখিত "দশ হাজার ফাইলের নাম" শর্ত সম্বোধন করে।