S3 এ আমার নীচের ফোল্ডার কাঠামো রয়েছে। একটি নির্দিষ্ট ফোল্ডারের অধীনে সমস্ত ফাইল পুনরাবৃত্তভাবে মুছে ফেলার কোনও উপায় আছে (বলুন foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
উত্তর:
সর্বশেষতম আওস-ক্লাইপ পাইথন কমান্ড লাইন সরঞ্জামের সাহায্যে , একটি বালতির একটি ফোল্ডারের নীচে সমস্ত ফাইলকে পুনরাবৃত্তভাবে মুছে ফেলা ঠিক:
aws s3 rm --recursive s3://your_bucket_name/foo/
বা বালতির নীচে সমস্ত কিছু মুছুন:
aws s3 rm --recursive s3://your_bucket_name
আপনি যা চান তা যদি আসলে বালতিটি মুছতে হয় তবে এক-পদক্ষেপের শর্টকাট রয়েছে:
aws s3 rb --force s3://your_bucket_name
যা সেই বালতিতে থাকা সামগ্রীগুলি পুনরাবৃত্তভাবে মুছে ফেলবে এবং তারপরে বালতিটি মুছবে।
দ্রষ্টব্য: s3://
এই কমান্ডগুলি কাজ করার জন্য প্রোটোকল উপসর্গ প্রয়োজন
rm
কেবল ফাইলগুলি rb --force
মুছবে তবে ফাইল এবং বালতি মুছে ফেলবে ।
--recursive
ফোল্ডারটি পাশাপাশি মুছে ফেলা ব্যবহার করে ।
এটিতে কী (ফাইল) প্রতি ডেডিকেটেড এপিআই কল প্রয়োজন হত, তবে অ্যামাজন এস 3 - ডিসেম্বর ২০১১ এ মাল্টি-অবজেক্ট মোছার কারণে এটি ব্যাপকভাবে সরলীকৃত হয়েছে :
অ্যামাজন এস 3 এর নতুন মাল্টি-অবজেক্ট মোছা আপনাকে একক অনুরোধে একটি এস 3 বালতি থেকে 1000 অবধি অবধি মুছতে সক্ষম করে gives
পিএইচপি এবং এ সম্পর্কিত সম্পর্কিত উদাহরণগুলির জন্য আরও ওয়াইল্ডকার্ড ব্যবহার করে এপিআই পিএইচপি ব্যবহার করে এস3 থেকে সম্পর্কিত প্রশ্নের আমার উত্তরটি দেখুন এবং পিএইচপি সম্পর্কিত অ্যাডাব্লুএস এসডিকে এটিকে 1.4.8 সংস্করণ থেকে সমর্থন করে )।
বেশিরভাগ এডাব্লুএস ক্লায়েন্ট লাইব্রেরিগুলি ইতিমধ্যে এই কার্যকারিতাটির জন্য একভাবে বা অন্য কোনওভাবে উত্সর্গীকৃত সমর্থন চালু করেছে, যেমন:
আপনি মোটামুটি নিম্নরূপে এডাব্লুএস-এর কাছে দুর্দান্ত বোটো পাইথন ইন্টারফেসের মাধ্যমে এটি অর্জন করতে পারেন (অনির্ধারিত, আমার মাথার উপরে থেকে):
import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket("bucketname")
bucketListResultSet = bucket.list(prefix="foo/bar")
result = bucket.delete_keys([key.name for key in bucketListResultSet])
এই উপলব্ধ যেহেতু সংস্করণ 1.24 এর রুবি জন্য Aws SDK এর এবং রিলিজ নোট হিসাবে ভাল একটি উদাহরণ প্রদান:
bucket = AWS::S3.new.buckets['mybucket']
# delete a list of objects by keys, objects are deleted in batches of 1k per
# request. Accepts strings, AWS::S3::S3Object, AWS::S3::ObectVersion and
# hashes with :key and :version_id
bucket.objects.delete('key1', 'key2', 'key3', ...)
# delete all of the objects in a bucket (optionally with a common prefix as shown)
bucket.objects.with_prefix('2009/').delete_all
# conditional delete, loads and deletes objects in batches of 1k, only
# deleting those that return true from the block
bucket.objects.delete_if{|object| object.key =~ /\.pdf$/ }
# empty the bucket and then delete the bucket, objects are deleted in batches of 1k
bucket.delete!
বা:
AWS::S3::Bucket.delete('your_bucket', :force => true)
আপনি উপসর্গ সহ ফাইলগুলির একটি মেয়াদোত্তীর্ণ তৈরি করতে অ্যামাজন এস 3 লাইফাইসাইকেলটি ব্যবহার করার বিষয়টিও বিবেচনা করতে পারেন foo/bar1
।
এস 3 ব্রাউজার কনসোলটি খুলুন এবং একটি বালতি ক্লিক করুন। তারপরে প্রোপার্টি এবং তারপরে লাইফ সাইকেল ক্লিক করুন।
উপসর্গ সহ সমস্ত ফাইলের জন্য একটি মেয়াদোত্তীর্ণ নিয়ম তৈরি করুন foo/bar1
এবং ফাইলটি তৈরি হওয়ার পর থেকে তারিখটি 1 দিন নির্ধারণ করুন।
সংরক্ষণ করুন এবং সমস্ত মিলে যাওয়া ফাইলগুলি 24 ঘন্টার মধ্যে চলে যাবে।
আপনার কাজ শেষ হওয়ার পরে নিয়মটি সরাতে ভুলবেন না!
কোনও এপিআই কল, তৃতীয় পক্ষের লাইব্রেরি, অ্যাপ্লিকেশন বা স্ক্রিপ্ট নেই।
আমি এইভাবে কয়েক মিলিয়ন ফাইল মুছে ফেলেছি।
লাইফাইসাইকেল রুল উইন্ডোটি দেখানো একটি স্ক্রিনশট (এই শটে নোটটি প্রিফিক্সটি ফাঁকা রেখে দেওয়া হয়েছে, বালতির সমস্ত কীকে প্রভাবিত করে):
সঙ্গে s3cmd
প্যাকেজ লিনাক্স মেশিনে ইনস্টল, আপনি এটা করতে পারেন
s3cmd rm s3://foo/bar --recursive
s3cmd del s3://BUCKET/OBJECT
বা পুরো বালতি মুছুন s3cmd rb s3://BUCKET
। নেই s3cmd rm
, অন্তত অনুযায়ী s3cmd --help
।
s3cmd rm
2019 এর সাহায্যে (দেলটির একটি নাম হিসাবে), এটি একটি দুর্দান্ত উত্তর। aws
CLI সরঞ্জাম শুধুমাত্র একটি বিরুদ্ধে কাজ /
উভয় ক্ষেত্রেই s3cmd কাজ যেহেতু সসীম উপসর্গ, কিন্তু না একটি ফোল্ডার এবং আংশিক ফাইলের নাম উপসর্গ। এই উত্তরটির জন্য আরও অনেকগুলি প্রয়োজনীয়তা রয়েছে, সঠিক সমাধানটি খুঁজে পেতে আমাকে অনেকদূর যেতে হবে।
আপনি যদি জাভা এডাব্লুএস এসডিকে ২.০ ব্যবহার করে "foo /" উপসর্গ সহ সমস্ত অবজেক্ট সরিয়ে নিতে চান তবে ক্ষেত্রে
import java.util.ArrayList;
import java.util.Iterator;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
//...
ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder()
.bucket(bucketName)
.prefix("foo/")
.build()
;
ListObjectsResponse objectsResponse = s3Client.listObjects(listObjectsRequest);
while (true) {
ArrayList<ObjectIdentifier> objects = new ArrayList<>();
for (Iterator<?> iterator = objectsResponse.contents().iterator(); iterator.hasNext(); ) {
S3Object s3Object = (S3Object)iterator.next();
objects.add(
ObjectIdentifier.builder()
.key(s3Object.key())
.build()
);
}
s3Client.deleteObjects(
DeleteObjectsRequest.builder()
.bucket(bucketName)
.delete(
Delete.builder()
.objects(objects)
.build()
)
.build()
);
if (objectsResponse.isTruncated()) {
objectsResponse = s3Client.listObjects(listObjectsRequest);
continue;
}
break;
};
আমি পাওয়ারশেল ব্যবহার করে আমার বালতি থেকে সমস্ত ফাইল সরিয়ে ফেলেছি:
Get-S3Object -BucketName YOUR_BUCKET | % { Remove-S3Object -BucketName YOUR_BUCKET -Key $_.Key -Force:$true }
সবেমাত্র দেখেছে যে অ্যামাজন এডাব্লুএস কনসোল মেনুতে "কীভাবে একটি বালতি খালি করতে" বিকল্প যুক্ত করেছে:
http://docs.aws.amazon.com/AmadonS3/latest/UG/DeletingaBucket.html
ভোট দেওয়া উত্তরটি একটি পদক্ষেপ মিস করছে।
প্রতি আ এস এস 3 সহায়তা:
বর্তমানে, কমান্ডের পাথ আর্গুমেন্টে ইউনিক্স স্টাইলের ওয়াইল্ডকার্ড ব্যবহারের জন্য কোনও সমর্থন নেই। তবে বেশিরভাগ কমান্ডের রয়েছে
--exclude "<value>"
এবং--include "<value>"
প্যারামিটারগুলি যা পছন্দসই ফলাফল অর্জন করতে পারে ......... যখন একাধিক ফিল্টার থাকে, নিয়মটি হ'ল পরে যে কমান্ডটিতে প্রদর্শিত ফিল্টারগুলি কমান্ডের আগে উপস্থিত ফিল্টারগুলির চেয়ে অগ্রাধিকার গ্রহণ করে। উদাহরণস্বরূপ, যদি ফিল্ডের প্যারামিটারগুলি কমান্ডে প্রেরণ করা থাকে তবে--exclude "*"
--include "*.txt"
.txt দিয়ে শেষ হওয়া ফাইল বাদে সমস্ত ফাইল কমান্ড থেকে বাদ দেওয়া হবে
aws s3 rm --recursive s3://bucket/ --exclude="*" --include="/folder_path/*"
পুরো বালতি সামগ্রী মুছে ফেলার জন্য লাইফাইসাইকেল নিয়ম ব্যবহার করা সবচেয়ে ভাল উপায়। প্রোগ্রামিয়ালি আপনি লাইফাইসাইকেল নিয়মে নীচের কোড (পিএইচপি) ব্যবহার করতে পারেন।
$expiration = array('Date' => date('U', strtotime('GMT midnight')));
$result = $s3->putBucketLifecycle(array(
'Bucket' => 'bucket-name',
'Rules' => array(
array(
'Expiration' => $expiration,
'ID' => 'rule-name',
'Prefix' => '',
'Status' => 'Enabled',
),
),
));
উপরের ক্ষেত্রে সমস্ত বস্তু মুছে ফেলা হবে তারিখের তারিখ - "আজ GMT মধ্যরাত"।
আপনি নিম্নলিখিত হিসাবে দিন নির্দিষ্ট করতে পারেন। তবে দিনের সাথে এটি বালতির সামগ্রী মুছে ফেলার জন্য কমপক্ষে 24 ঘন্টা (1 দিন সর্বনিম্ন) অপেক্ষা করবে।
$expiration = array('Days' => 1);
আমাকে নিম্নলিখিতগুলি করা দরকার ...
def delete_bucket
s3 = init_amazon_s3
s3.buckets['BUCKET-NAME'].objects.each do |obj|
obj.delete
end
end
def init_amazon_s3
config = YAML.load_file("#{Rails.root}/config/s3.yml")
AWS.config(:access_key_id => config['access_key_id'],:secret_access_key => config['secret_access_key'])
s3 = AWS::S3.new
end
এস 3 ম্যানেজমেন্ট কনসোলে বালতিটির চেকমার্কে ক্লিক করুন এবং উপরের ডানদিকের খালি বোতামটিতে ক্লিক করুন।