উত্তর:
এস 3-তে কোনও ফাইলের নাম পরিবর্তনের সরাসরি কোনও পদ্ধতি নেই। আপনাকে যা করতে হবে তা হ'ল বিদ্যমান ফাইলটিকে একটি নতুন নামের সাথে অনুলিপি করুন (কেবলমাত্র টার্গেট কীটি সেট করুন) এবং পুরানোটি মুছুন।
আমি কেবল এটি পরীক্ষা করেছি এবং এটি কাজ করে:
aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
--recursive
?
s3://<bucketname>/<folder_name_from>
, যেমন s3://<bucketname>/<folder_name_from>/some/deeper/folders
।
aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive
aws s3 rm s3://source_folder --recursive
cp
তারপরে কি পছন্দ rm
করা যায় mv
?
আপনি ব্যবহার করতে পারেন ডেস্কটপ AWS CLI কমান্ড থেকে mv
ফাইল
আপনি হয় ডাব্লুএসএস সি এল আই বা এস 3 সিএমডি কমান্ডটি AWS S3 বালতিতে ফাইল এবং ফোল্ডারগুলির নাম পরিবর্তন করতে পারেন।
এস 3 সিএমডি ব্যবহার করে একটি ফোল্ডারটির নাম পরিবর্তন করতে নিম্নলিখিত বাক্য গঠন ব্যবহার করুন,
s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
AWS CLI ব্যবহার করে, একটি ফোল্ডারটির নাম পরিবর্তন করতে নিম্নলিখিত বাক্য গঠন ব্যবহার করুন,
aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
আমি এই কাজ পেয়েছি। আপনি পিএইচপি এর জন্য এডাব্লুএস এসডিকে এভাবে ব্যবহার করতে পারেন:
use Aws\S3\S3Client;
$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';
$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Key Name ***';
// Instantiate the client.
$s3 = S3Client::factory();
// Copy an object.
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
));
http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingPHP.html
আমাদের 2 টি উপায় রয়েছে যার মাধ্যমে আমরা AWS S3 স্টোরেজে কোনও ফাইলটির নাম পরিবর্তন করতে পারি -
1। সিএলআই সরঞ্জাম ব্যবহার করে -
আউস এস 3 - রিসার্সিভ এমভি এস 3: // বালতি-নাম / dirname / Oldfile s3: // বালতি-নাম / dirname / newfile
2. এসডিকে ব্যবহার করে
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));
জিইউআইয়ের মাধ্যমে কোনও ফোল্ডারটির নাম পরিবর্তন করার কোনও উপায় নেই, এটি অর্জনের দ্রুততম (এবং আপনি যদি জিইউআই পছন্দ করেন তবে সহজ) উপায়টি একটি সরল পুরানো অনুলিপি সম্পাদন করা। এটি অর্জন করতে: জিইউআই ব্যবহার করে এস 3 এ নতুন ফোল্ডার তৈরি করুন, আপনার পুরানো ফোল্ডারে যান, সমস্ত নির্বাচন করুন, "অনুলিপি" চিহ্নিত করুন এবং তারপরে নতুন ফোল্ডারে নেভিগেট করুন এবং "পেস্ট" নির্বাচন করুন। হয়ে গেলে পুরানো ফোল্ডারটি সরান।
এই সহজ পদ্ধতিটি খুব দ্রুত কারণ এটি এস 3 থেকে নিজেই অনুলিপি করা হয়েছে (পুনরায় আপলোড করার দরকার নেই বা এর মতো কিছু নেই) এবং এটি আপনার প্রত্যাশিত কপিরাইটযুক্ত সামগ্রীর অনুমতি এবং মেটাডেটা বজায় রাখে।
আপনি নেট নেট এ এটি কীভাবে করেন তা এখানে S3 .NET SDK
:
var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);
PS পঠনযোগ্যতার জন্য এটি না করে সত্ত্বেও ক্লায়েন্ট পদ্ধতিগুলির "Async" সংস্করণগুলি ব্যবহার করার চেষ্টা করুন
এটি একই ফোল্ডারে ফাইলটির নামকরণের জন্য কাজ করে
aws s3 mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv
নীচে এস 3-তে ফাইলটির নামকরণের কোডের উদাহরণ দেওয়া আছে। আমার ফাইলটি স্পার্ক ও / পি ফাইলের কারণে অংশ -২০০ * ছিল, তারপরে আমি এটিকে একই অবস্থানের অন্য কোনও ফাইলের সাথে অনুলিপি করে অংশ -২০০ * মুছি:
import boto3
client = boto3.client('s3')
response = client.list_objects(
Bucket='lsph',
MaxKeys=10,
Prefix='03curated/DIM_DEMOGRAPHIC/',
Delimiter='/'
)
name = response["Contents"][0]["Key"]
copy_source = {'Bucket': 'lsph', 'Key': name}
client.copy_object(Bucket='lsph', CopySource=copy_source,
Key='03curated/DIM_DEMOGRAPHIC/'+'DIM_DEMOGRAPHIC.json')
client.delete_object(Bucket='lsph', Key=name)
এডাব্লুএস কনসোলে, আপনি যদি এস 3 এ যান, আপনি দেখতে পাবেন আপনার ফোল্ডারগুলি তালিকাভুক্ত। আপনি যদি ফোল্ডারে নেভিগেট করেন তবে আপনি তালিকাভুক্ত বস্তু দেখতে পাবেন। ডান ক্লিক করুন এবং আপনি নাম পরিবর্তন করতে পারেন। বা, আপনি নিজের বস্তুর সামনে বাক্সটি চেক করতে পারেন, তারপরে অ্যাকশনস নামক পুল ডাউন মেনু থেকে আপনি নামটি নির্বাচন করতে পারেন। সবেমাত্র আমার জন্য কাজ করেছেন, 3-31-2019
নাজের উত্তর হিসাবে s3 এর সরাসরি নামকরণ সম্ভব নয়।
আমি একটি কোড স্নিপেট সংযুক্ত করেছি যা সমস্ত লিখিত সামগ্রী অনুলিপি করবে
কোডটি কাজ করছে কেবল আপনার আউস অ্যাক্সেস কী এবং গোপন কী
কোডে আমি যা করেছি তা এখানে
-> উত্স ফোল্ডার সামগ্রী (নেস্টেড চাইল্ড এবং ফোল্ডার) অনুলিপি করুন এবং গন্তব্য ফোল্ডারে আটকানো
-> অনুলিপিটি সম্পূর্ণ হয়ে গেলে, উত্স ফোল্ডারটি মুছুন
package com.bighalf.doc.amazon;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3ObjectSummary;
public class Test {
public static boolean renameAwsFolder(String bucketName,String keyName,String newName) {
boolean result = false;
try {
AmazonS3 s3client = getAmazonS3ClientObject();
List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries();
//some meta data to create empty folders start
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(0);
InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
//some meta data to create empty folders end
//final location is the locaiton where the child folder contents of the existing folder should go
String finalLocation = keyName.substring(0,keyName.lastIndexOf('/')+1)+newName;
for (S3ObjectSummary file : fileList) {
String key = file.getKey();
//updating child folder location with the newlocation
String destinationKeyName = key.replace(keyName,finalLocation);
if(key.charAt(key.length()-1)=='/'){
//if name ends with suffix (/) means its a folders
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, destinationKeyName, emptyContent, metadata);
s3client.putObject(putObjectRequest);
}else{
//if name doesnot ends with suffix (/) means its a file
CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName,
file.getKey(), bucketName, destinationKeyName);
s3client.copyObject(copyObjRequest);
}
}
boolean isFodlerDeleted = deleteFolderFromAws(bucketName, keyName);
return isFodlerDeleted;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static boolean deleteFolderFromAws(String bucketName, String keyName) {
boolean result = false;
try {
AmazonS3 s3client = getAmazonS3ClientObject();
//deleting folder children
List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries();
for (S3ObjectSummary file : fileList) {
s3client.deleteObject(bucketName, file.getKey());
}
//deleting actual passed folder
s3client.deleteObject(bucketName, keyName);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
intializeAmazonObjects();
boolean result = renameAwsFolder(bucketName, keyName, newName);
System.out.println(result);
}
private static AWSCredentials credentials = null;
private static AmazonS3 amazonS3Client = null;
private static final String ACCESS_KEY = "";
private static final String SECRET_ACCESS_KEY = "";
private static final String bucketName = "";
private static final String keyName = "";
//renaming folder c to x from key name
private static final String newName = "";
public static void intializeAmazonObjects() {
credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY);
amazonS3Client = new AmazonS3Client(credentials);
}
public static AmazonS3 getAmazonS3ClientObject() {
return amazonS3Client;
}
}
ফাইল এবং ফোল্ডারটি আসলে এস 3-তে অবজেক্ট। তাদের পুনরায় নামকরণের জন্য আপনার পুট ওবজেট কপি ব্যবহার করা উচিত। Http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html দেখুন
Python, Ruby, Java, C#, PHP, Node.js, Android, iOS, browser JavaScript
না থাকলেও বড়রা
S3DirectoryInfo এর একটি মুভটো পদ্ধতি রয়েছে যা একটি ডিরেক্টরিতে স্থানান্তরিত করে অন্য ডাইরেক্টরি, যেমন যে সরানো ডিরেক্টরির একই নামের অন্যান্য ডিরেক্টরির একটি সাব হয়ে যাবে যেমন মূলত ছিল।
নীচের এক্সটেনশন পদ্ধতিটি একটি ডিরেক্টরিকে অন্য ডিরেক্টরিতে স্থানান্তরিত করবে, অর্থাৎ সরানো ডিরেক্টরিটি অন্য ডিরেক্টরিতে পরিণত হবে। এটি আসলে যা করে তা হ'ল নতুন ডিরেক্টরি তৈরি করা, এতে পুরানো ডিরেক্টরিটির সমস্ত বিষয়বস্তু সরিয়ে ফেলা এবং তারপরে পুরানোটি মুছুন।
public static class S3DirectoryInfoExtensions
{
public static S3DirectoryInfo Move(this S3DirectoryInfo fromDir, S3DirectoryInfo toDir)
{
if (toDir.Exists)
throw new ArgumentException("Destination for Rename operation already exists", "toDir");
toDir.Create();
foreach (var d in fromDir.EnumerateDirectories())
d.MoveTo(toDir);
foreach (var f in fromDir.EnumerateFiles())
f.MoveTo(toDir);
fromDir.Delete();
return toDir;
}
}
দির সমস্ত * .csv.err ফাইলের নাম পরিবর্তন <<bucket>>/landing
করে * .csv ফাইলগুলিকে এস 3 সিএমডি দিয়ে দিন
export aws_profile='foo-bar-aws-profile'
while read -r f ; do tgt_fle=$(echo $f|perl -ne 's/^(.*).csv.err/$1.csv/g;print'); \
echo s3cmd -c ~/.aws/s3cmd/$aws_profile.s3cfg mv $f $tgt_fle; \
done < <(s3cmd -r -c ~/.aws/s3cmd/$aws_profile.s3cfg ls --acl-public --guess-mime-type \
s3://$bucket | grep -i landing | grep csv.err | cut -d" " -f5)
একটি সফ্টওয়্যার রয়েছে যেখানে আপনি বিভিন্ন ধরণের অপারেশন করার জন্য এস 3 বালতি নিয়ে খেলতে পারেন।
সফ্টওয়্যার নাম: এস 3 ব্রাউজার
এস 3 ব্রাউজারটি অ্যামাজন এস 3 এবং অ্যামাজন ক্লাউডফ্রন্টের জন্য একটি ফ্রিওয়্যার উইন্ডোজ ক্লায়েন্ট। অ্যামাজন এস 3 একটি সাধারণ ওয়েব পরিষেবাদি ইন্টারফেস সরবরাহ করে যা ওয়েবে যে কোনও জায়গা থেকে যে কোনও সময় যে কোনও পরিমাণ ডেটা সঞ্চয় এবং পুনরুদ্ধারে ব্যবহার করা যেতে পারে। অ্যামাজন ক্লাউডফ্রন্ট একটি সামগ্রী বিতরণ নেটওয়ার্ক (সিডিএন)। এটি আপনার ফাইলগুলি প্রান্তের অবস্থানগুলির একটি বিশ্বব্যাপী নেটওয়ার্ক ব্যবহার করে বিতরণ করতে ব্যবহার করা যেতে পারে।
যদি এটি কেবলমাত্র একক সময় হয় তবে আপনি এই ক্রিয়াকলাপগুলি সম্পাদন করতে কমান্ড লাইনটি ব্যবহার করতে পারেন:
(1) একই বালতিতে ফোল্ডারটির নাম পরিবর্তন করুন:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket/folder1/* s3://bucket/folder2/
(২) বালতিটির নাম পরিবর্তন করুন:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket1/folder/* s3://bucket2/folder/
কোথায়,
{access_key} = এস 3 ক্লায়েন্টের জন্য আপনার বৈধ অ্যাক্সেস কী
{গোপন_কি} = এস 3 ক্লায়েন্টের জন্য আপনার বৈধ স্ক্রিট কী
এটি কোনও সমস্যা ছাড়াই ঠিকঠাক কাজ করছে।
ধন্যবাদ