जवाबों:
S3 में किसी फ़ाइल का नाम बदलने का कोई सीधा तरीका नहीं है। आपको जो करना है, मौजूदा फ़ाइल को एक नए नाम (बस लक्ष्य कुंजी सेट करें) के साथ कॉपी करें और पुराने को हटा दें।
मैंने अभी इसका परीक्षण किया है और यह काम करता है:
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
AWS S3 बाल्टी में फ़ाइलों और फ़ोल्डरों का नाम बदलने के लिए आप या तो AWS CLI या s3cmd कमांड का उपयोग कर सकते हैं।
S3cmd का उपयोग करके, फ़ोल्डर का नाम बदलने के लिए निम्न सिंटैक्स का उपयोग करें,
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>
मुझे अभी यह काम मिला है। आप इस तरह से PHP के लिए AWS SDK का उपयोग कर सकते हैं:
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। सीएलआई उपकरण का उपयोग करना -
aws s3 --recursive mv s3: // बाल्टी-नाम / dirname / oldfile s3: // बाल्टी-नाम / dirname / newfile
2. एसडीके का उपयोग करना
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));
GUI के माध्यम से एक फ़ोल्डर का नाम बदलने का कोई तरीका नहीं है, सबसे तेज़ (और अगर आपको GUI पसंद है) तो इसे प्राप्त करने का तरीका एक पुरानी पुरानी प्रतिलिपि का प्रदर्शन करना है। इसे प्राप्त करने के लिए: GU3 का उपयोग करके S3 पर नया फ़ोल्डर बनाएं, अपने पुराने फ़ोल्डर में जाएं, सभी का चयन करें, "कॉपी करें" और फिर नए फ़ोल्डर में नेविगेट करें और "पेस्ट" चुनें। जब हो जाए, तो पुराने फ़ोल्डर को हटा दें।
यह सरल विधि बहुत तेज़ है क्योंकि यह S3 से स्वयं की प्रतिलिपि है (पुन: अपलोड करने की आवश्यकता नहीं है या ऐसा कुछ भी नहीं है) और यह आपके द्वारा कॉपी की गई वस्तुओं की अनुमतियों और मेटाडेटा को भी बनाए रखता है।
यहां बताया गया है कि आप इसका उपयोग .NET में कैसे करते हैं 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
नीचे s3 पर फ़ाइल का नाम बदलने के लिए कोड उदाहरण है। स्पार्क ओ / पी फ़ाइल के कारण मेरी फ़ाइल पार्ट -000 * थी, फिर मैं इसे उसी स्थान पर किसी अन्य फ़ाइल नाम पर कॉपी करता हूं और पार्ट -000 * हटाता हूं:
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)
AWS कंसोल में, यदि आप S3 पर जाते हैं, तो आप अपने फ़ोल्डरों को सूचीबद्ध देखेंगे। यदि आप फ़ोल्डर में नेविगेट करते हैं, तो आप ऑब्जेक्ट (ओं) को सूचीबद्ध देखेंगे। राइट क्लिक करें और आप नाम बदल सकते हैं। या, आप अपने ऑब्जेक्ट के सामने स्थित बॉक्स को चेक कर सकते हैं, फिर एक्शन नाम के पुल डाउन मेनू से, आप नाम बदल सकते हैं। बस मेरे लिए काम किया, 3-31-2019
जैसा कि नाज़ ने कहा कि एस 3 का सीधा नामकरण संभव नहीं है।
मैंने एक कोड स्निपेट संलग्न किया है जो सभी सामग्रियों को कॉपी करेगा
कोड काम कर रहा है बस अपने aws का उपयोग कुंजी और गुप्त कुंजी जोड़ें
यहाँ मैंने कोड में क्या किया
-> स्रोत फ़ोल्डर सामग्री (नेस्टेड बच्चे और फ़ोल्डर्स) की प्रतिलिपि बनाएँ और गंतव्य फ़ोल्डर में चिपकाया जाता है
-> जब नकल पूरी हो जाती है, तो स्रोत फ़ोल्डर को हटा दें
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;
}
}
फ़ाइल और फ़ोल्डर वास्तव में S3 में ऑब्जेक्ट हैं। उनका नाम बदलने के लिए आपको PUT OBJECT COPY का उपयोग करना चाहिए। Http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPP.html देखें
Python, Ruby, Java, C#, PHP, Node.js, Android, iOS, browser JavaScript
) करते हैं और उन्हें aws.amazon.com/tools
S3DirectoryInfo में एक MoveTo मेथड है, जो एक डायरेक्टरी को दूसरी डायरेक्टरी में ले जाएगा, जैसे कि मूव्ड डाइरेक्टरी दूसरे डायरेक्टरी का उपनिर्देशिका बन जाएगी, जैसा कि मूल रूप से था।
नीचे दी गई विस्तार विधि एक निर्देशिका को दूसरी निर्देशिका में ले जाएगी, अर्थात स्थानांतरित निर्देशिका दूसरी निर्देशिका बन जाएगी। यह वास्तव में क्या करता है नई निर्देशिका बनाएं, पुरानी निर्देशिका की सभी सामग्री को इसमें स्थानांतरित करें, और फिर पुराने को हटा दें।
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
dir में * .csv फ़ाइलों के साथ s3cmd नाम दें
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)
एक सॉफ्टवेयर है जहां आप विभिन्न प्रकार के ऑपरेशन करने के लिए s3 बाल्टी के साथ खेल सकते हैं।
सॉफ्टवेयर का नाम: S3 ब्राउज़र
S3 ब्राउज़र Amazon S3 और Amazon CloudFront के लिए एक फ्रीवेयर विंडोज क्लाइंट है। अमेज़ॅन S3 एक सरल वेब सेवा इंटरफ़ेस प्रदान करता है जिसका उपयोग किसी भी समय, किसी भी समय, वेब पर कहीं से भी डेटा को संग्रहीत और पुनर्प्राप्त करने के लिए किया जा सकता है। Amazon CloudFront एक कंटेंट डिलीवरी नेटवर्क (CDN) है। इसका उपयोग किनारे के स्थानों के वैश्विक नेटवर्क का उपयोग करके आपकी फ़ाइलों को वितरित करने के लिए किया जा सकता है।
यदि यह केवल एकल समय है तो आप इन कार्यों को करने के लिए कमांड लाइन का उपयोग कर सकते हैं:
(1) एक ही बाल्टी में फ़ोल्डर का नाम बदलें:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket/folder1/* s3://bucket/folder2/
(2) बाल्टी का नाम बदलें:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket1/folder/* s3://bucket2/folder/
कहाँ पे,
{access_key} = s3 क्लाइंट के लिए आपकी मान्य एक्सेस कुंजी
{secret_key} = s3 क्लाइंट के लिए आपकी मान्य स्क्रेच कुंजी
यह बिना किसी समस्या के ठीक काम कर रहा है।
धन्यवाद