অ্যামাজন এস 3-এ ফাইল এবং ফোল্ডারটির কীভাবে নাম পরিবর্তন করবেন?


207

অ্যামাজন এস 3-তে ফাইল এবং ফোল্ডারগুলির নামকরণের কোনও ফাংশন রয়েছে কি? সম্পর্কিত সম্পর্কিত পরামর্শগুলিও স্বাগত।

উত্তর:


62

এস 3-তে কোনও ফাইলের নাম পরিবর্তনের সরাসরি কোনও পদ্ধতি নেই। আপনাকে যা করতে হবে তা হ'ল বিদ্যমান ফাইলটিকে একটি নতুন নামের সাথে অনুলিপি করুন (কেবলমাত্র টার্গেট কীটি সেট করুন) এবং পুরানোটি মুছুন।


112
আপনার উত্তরের সাথে একটি উদাহরণ সরবরাহ করুন, অন্যথায় একটি মন্তব্য করুন।
চিরকালীন

38
@ চিরকালীন সময়টি চমৎকার লাগবে .. তবে এটি প্রয়োজনীয় নয় .. প্রশ্নটির ভাষা সম্পর্কে কোনও ইঙ্গিতও নেই ... সুতরাং উদাহরণ দেওয়ার কী দরকার?
লিপিস

49
এটি ভুল উত্তর। আপনি এমভি ব্যবহার করে এস 3-তে ফাইল স্থানান্তর করতে পারেন। এমভি = পুনঃনামকরণ
নিকোলো

17
এটি দুটি কারণে একটি ভুল উত্তর: 1) আপনি জিউআইআই ব্যবহার করে ফাইলটির ডান ক্লিক এবং পুনরায় নামকরণ করতে পারেন এবং 2) আপনি মুভি কমান্ডের সাহায্যে বা একটি এসডিকে মাধ্যমে ফাইলটি সরানোর আগে এটি উল্লিখিত হয়েছে।
ম্যাক্সিমাস

11
আপনি কোনও ফোল্ডারের নাম S3 এ পুনরায় নামকরণ করতে ডান ক্লিক করতে পারবেন না।
51

458

আমি কেবল এটি পরীক্ষা করেছি এবং এটি কাজ করে:

aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>

10
এটি কি পারমাণবিক? প্রথমটি কার্যকর করার সময় দ্বিতীয় (এবং একই) কমান্ডটি কি ব্যর্থ হবে?
অ্যালেক্স বি

13
কোনও এডাব্লুএসের পারমাণবিক পদক্ষেপ অপারেশন নেই
এপি।

1
ধন্যবাদ! আমাদের দরকার কেন --recursive?
আজিজ অল্টো

2
@ আজিজআল্টো এর অধীনে আরও গভীর ফোল্ডার কাঠামো রয়েছে s3://<bucketname>/<folder_name_from>, যেমন s3://<bucketname>/<folder_name_from>/some/deeper/folders
ভিলি

1
@ জোহানএকেনবেরি আমি বিশ্বাস করতে পারি না যে রাজের ভুল মন্তব্যে 15 টি উপস্থাপনা রয়েছে। এটি মুছে ফেলা উচিত। সম্পাদনা করুন: এবং এটি এখনই মুছে ফেলা হয়েছিল। খুশী হলাম।
ডগ এস

31
aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive
aws s3 rm s3://source_folder --recursive

6
cpতারপরে কি পছন্দ rmকরা যায় mv?
পাইডারম্যান

12
আমি সিভি / আরএম এর চেয়ে বেশি সিভি / আরএম পছন্দ করি যেহেতু আপনি কোনও মুছে ফেলার আগে কপিটি সফলভাবে তৈরি হয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন।
থাং ট্রান

2
কমান্ডের চালনা ছাড়াই আপনি --dryrun পতাকাটি ব্যবহার করতে পারেন।
কিউমুন্ডনিক


15

আপনি হয় ডাব্লুএসএস সি এল আই বা এস 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>

1
আমার যদি সমস্ত .csv ফাইলের নতুন নামকরণের দরকার হয় তবে কী হবে। আমি কীভাবে আসছি?
LUZO

14

আমি এই কাজ পেয়েছি। আপনি পিএইচপি এর জন্য এডাব্লুএস এসডিকে এভাবে ব্যবহার করতে পারেন:

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


পুরোপুরি নামকরণ (নকল করার বিপরীতে এবং তারপরে মূল ফোল্ডারটি মুছে ফেলার জন্য), আপনি উত্সটি তৈরি করতে এবং লক্ষ্যটিকে লক্ষ্য করতে সক্ষম হন? বা আপনাকে এগুলি আলাদা করতে হবে, তারপরে মূল ফোল্ডারটি মুছবেন?
পাইডারম্যান

আমি মনে করি আমি একটি অনুলিপি করেছি তারপরে আসলটি মুছুন। স্মৃতি থেকে আমি এই উত্তরটি আমার নিজস্ব রেফারেন্সের জন্য লিখেছি - স্বীকৃত উত্তরটি একই বলে, তবে কোড উদাহরণ দেয় নি। অন্যদিকে, আমি আপনাকে এডাব্লুএস ডকুমেন্টগুলির মাধ্যমে একটি নতুন চেহারা দেখার পরামর্শ দিচ্ছি, কারণ তারা সর্বদা নতুন বিকল্পগুলি বিকশিত করে চলেছে।
টম

এই উদাহরণটি 'ন্যায্য' অনুলিপি (মুভি), (বা 'পুনরায় নামকরণ') না করে অনুলিপি কার্যকারিতা দেখায়। আমি জানি এটি কয়েক বছরের পুরনো, তবে কোনও সম্ভাবনা আপনি কী সম্পূর্ণ আপডেট দিয়ে এটি আপডেট করতে পারবেন? নোট করুন যে এস 3 নতুন টাইমস্ট্যাম্প ইত্যাদির সাহায্যে 'মুভিড' অবজেক্টটিকে নতুন অবজেক্ট হিসাবে তৈরি করবে (আইরিক)।
জেমসবিবি

10

আমাদের 2 টি উপায় রয়েছে যার মাধ্যমে আমরা AWS S3 স্টোরেজে কোনও ফাইলটির নাম পরিবর্তন করতে পারি -

1। সিএলআই সরঞ্জাম ব্যবহার করে -

আউস এস 3 - রিসার্সিভ এমভি এস 3: // বালতি-নাম / dirname / Oldfile s3: // বালতি-নাম / dirname / newfile

2. এসডিকে ব্যবহার করে

$s3->copyObject(array(
'Bucket'     => $targetBucket,
'Key'        => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));

8

জিইউআইয়ের মাধ্যমে কোনও ফোল্ডারটির নাম পরিবর্তন করার কোনও উপায় নেই, এটি অর্জনের দ্রুততম (এবং আপনি যদি জিইউআই পছন্দ করেন তবে সহজ) উপায়টি একটি সরল পুরানো অনুলিপি সম্পাদন করা। এটি অর্জন করতে: জিইউআই ব্যবহার করে এস 3 এ নতুন ফোল্ডার তৈরি করুন, আপনার পুরানো ফোল্ডারে যান, সমস্ত নির্বাচন করুন, "অনুলিপি" চিহ্নিত করুন এবং তারপরে নতুন ফোল্ডারে নেভিগেট করুন এবং "পেস্ট" নির্বাচন করুন। হয়ে গেলে পুরানো ফোল্ডারটি সরান।

এই সহজ পদ্ধতিটি খুব দ্রুত কারণ এটি এস 3 থেকে নিজেই অনুলিপি করা হয়েছে (পুনরায় আপলোড করার দরকার নেই বা এর মতো কিছু নেই) এবং এটি আপনার প্রত্যাশিত কপিরাইটযুক্ত সামগ্রীর অনুমতি এবং মেটাডেটা বজায় রাখে।


@ ট্রিপড আমার পরীক্ষায় কিছুক্ষণ আগে, ফাইলগুলি ওয়েব জিইউআই ব্যবহার করে নাম পরিবর্তন করা যেতে পারে তবে ফোল্ডার নয় ।
রিনোগো

7

ফাইলগুলির পক্ষে এটি এখন সম্ভব, ফাইলটি নির্বাচন করুন এবং আবার জিইউআইতে পুনরায় নাম নির্বাচন করুন।

ফোল্ডারটির নতুন নামকরণের জন্য, আপনাকে তার পরিবর্তে একটি নতুন ফোল্ডার তৈরি করতে হবে এবং পুরাতনটির সামগ্রীগুলি নির্বাচন করতে হবে এবং এটিকে অনুলিপি / আটকানো হবে ("আরও" অধীনে আবার)


5

আপনি নেট নেট এ এটি কীভাবে করেন তা এখানে S3 .NET SDK:

var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);

PS পঠনযোগ্যতার জন্য এটি না করে সত্ত্বেও ক্লায়েন্ট পদ্ধতিগুলির "Async" সংস্করণগুলি ব্যবহার করার চেষ্টা করুন


4

এটি একই ফোল্ডারে ফাইলটির নামকরণের জন্য কাজ করে

aws s3  mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv

1
অগত্যা একই ফোল্ডারে নয়। আপনি যে কমান্ডটি সরবরাহ করেছেন তা মোহন করার মতো কাজ করে। ধন্যবাদ.
আর.চ্যা

3

নীচে এস 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)

কেবলমাত্র লক্ষ্য করুন যে এটি অজগর
f.khantsis

2

এডাব্লুএস কনসোলে, আপনি যদি এস 3 এ যান, আপনি দেখতে পাবেন আপনার ফোল্ডারগুলি তালিকাভুক্ত। আপনি যদি ফোল্ডারে নেভিগেট করেন তবে আপনি তালিকাভুক্ত বস্তু দেখতে পাবেন। ডান ক্লিক করুন এবং আপনি নাম পরিবর্তন করতে পারেন। বা, আপনি নিজের বস্তুর সামনে বাক্সটি চেক করতে পারেন, তারপরে অ্যাকশনস নামক পুল ডাউন মেনু থেকে আপনি নামটি নির্বাচন করতে পারেন। সবেমাত্র আমার জন্য কাজ করেছেন, 3-31-2019


"পুনরায় নামকরণ" ফোল্ডারগুলির জন্য আমার জন্য গ্রেভড, এবং ইন্টারনেট "এস 3 ব্রাউজারে ফোল্ডারগুলির জন্য পুনরায় নামটি গ্রেইড আউট" এর মতো প্রশ্নে পূর্ণ of
স্টিভ

1

নাজের উত্তর হিসাবে 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;
}

}


2
দয়া করে আপনার কোডটি সম্পাদনা বিবেচনা করুন কারণ এই প্রয়োগটি সমস্ত সামগ্রী ফেরত দেয় না, যেমনটি আপনি সূচিত করেছেন, 'আপনি যখন তালিকাঅবজেক্টগুলি (bucketName, keyName) কল করেন তখন এটি সর্বাধিক 1000 আইটেম ফেরত দেয়, আপনাকে অবজেক্টলিস্টিং.আইস ট্রান্সকটেড () পদ্ধতিতে কল করতে হবে একটি নতুন অনুরোধ কল প্রয়োজন হলে। এটিকে একটি নথি
AmamaSS3/

এটি কাজ করে তবে আমি উপরের মন্তব্যেও একমত। কেবলমাত্র <S3ObjectSummary> fileList = s3client.listObjects (বাল্টনেম, কী-নাম) তালিকাটি প্রতিস্থাপন করুন .getObjectSummaries (); অবজেক্টলিস্টিং অবজেক্টলিস্টিং সহ = s3.listObjects (bucketName, keyName); <S3ObjectSummary> fileList = নতুন অ্যারেলিস্ট <> () তালিকা; fileList.addAll (objectListing.getObjectSummaries ()); যখন (অবজেক্টলিস্টিং.আইস ট্রানকটেড ()) {অবজেক্টলিস্টিং = s3.listNextBatchOfObjects (অবজেক্টলিস্টিং); fileList.addAll (objectListing.getObjectSummaries ()); }
কার্তিক

0

ফাইল এবং ফোল্ডারটি আসলে এস 3-তে অবজেক্ট। তাদের পুনরায় নামকরণের জন্য আপনার পুট ওবজেট কপি ব্যবহার করা উচিত। Http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html দেখুন


1
কিছু ভাষায় AWS দ্বারা প্রদত্ত এসডিকে Python, Ruby, Java, C#, PHP, Node.js, Android, iOS, browser JavaScriptনা থাকলেও বড়রা
ডন

3
ক্লাব-পার্শ্ব অ্যাপ্লিকেশনগুলির জন্য এডাব্লুএস থেকে জাভা এসডিকে খুব বড় (এবং এককথায়) is
জেসি বারনুম 14

0

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;
    }
}

0

দির সমস্ত * .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)

-2

একটি সফ্টওয়্যার রয়েছে যেখানে আপনি বিভিন্ন ধরণের অপারেশন করার জন্য এস 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 ক্লায়েন্টের জন্য আপনার বৈধ স্ক্রিট কী

এটি কোনও সমস্যা ছাড়াই ঠিকঠাক কাজ করছে।

ধন্যবাদ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.