Câu trả lời:
Không có phương pháp trực tiếp để đổi tên một tệp trong S3. Những gì bạn phải làm là sao chép tệp hiện có với một tên mới (chỉ cần đặt khóa đích) và xóa tệp cũ.
Tôi vừa thử nghiệm cái này và nó hoạt động:
aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
--recursive
?
s3://<bucketname>/<folder_name_from>
, tức là 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
theo sau bởi rm
thích hợp hơn mv
?
Bạn có thể sử dụng các lệnh AWS CLI cho mv
các tệp
Bạn có thể sử dụng lệnh AWS CLI hoặc s3cmd để đổi tên các tệp và thư mục trong nhóm AWS S3.
Sử dụng S3cmd, sử dụng cú pháp sau để đổi tên thư mục,
s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Sử dụng AWS CLI, sử dụng cú pháp sau để đổi tên thư mục,
aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Tôi vừa mới làm việc này. Bạn có thể sử dụng SDK AWS cho PHP như thế này:
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
Chúng tôi có 2 cách để có thể đổi tên tệp trên bộ lưu trữ AWS S3 -
1. Sử dụng công cụ CLI -
aws s3 --recursive mv s3: // tên xô / dirname / oldfile s3: // tên xô / dirname / newfile
2.Sử dụng SDK
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));
Không có cách nào để đổi tên một thư mục thông qua GUI, cách nhanh nhất (và dễ nhất nếu bạn thích GUI) để đạt được điều này là thực hiện một bản sao cũ đơn giản. Để đạt được điều này: tạo thư mục mới trên S3 bằng GUI, truy cập thư mục cũ của bạn, chọn tất cả, đánh dấu "sao chép" và sau đó điều hướng đến thư mục mới và chọn "dán". Khi hoàn tất, loại bỏ thư mục cũ.
Phương pháp đơn giản này rất nhanh vì nó là bản sao từ S3 sang chính nó (không cần tải lên lại hoặc bất cứ thứ gì tương tự) và nó cũng duy trì các quyền và siêu dữ liệu của các đối tượng được sao chép như bạn mong đợi.
Đây là cách bạn làm điều đó trong .NET, sử dụng S3 .NET SDK
:
var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);
PS cố gắng sử dụng các phiên bản "Async" của các phương thức máy khách nếu có thể, mặc dù tôi đã không làm như vậy để dễ đọc
Điều này hoạt động để đổi tên tập tin trong cùng một thư mục
aws s3 mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv
Dưới đây là ví dụ mã để đổi tên tệp trên s3. Tệp của tôi là part-000 * vì tệp spark o / p, sau đó tôi sao chép nó sang tên tệp khác trên cùng một vị trí và xóa phần-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)
Trong bảng điều khiển AWS, nếu bạn điều hướng đến S3, bạn sẽ thấy các thư mục của mình được liệt kê. Nếu bạn điều hướng đến thư mục, bạn sẽ thấy (các) đối tượng được liệt kê. nhấp chuột phải và bạn có thể đổi tên. HOẶC, bạn có thể chọn hộp phía trước đối tượng của mình, sau đó từ menu kéo xuống có tên HÀNH ĐỘNG, bạn có thể chọn đổi tên. Chỉ làm việc cho tôi, 3-31-2019
Như trả lời bởi Naaz đổi tên trực tiếp của s3 là không thể.
tôi đã đính kèm một đoạn mã sẽ sao chép tất cả các nội dung
mã đang hoạt động chỉ cần thêm khóa truy cập aws và khóa bí mật của bạn
đây là những gì tôi đã làm trong mã
-> sao chép nội dung thư mục nguồn (con và thư mục lồng nhau) và dán vào thư mục đích
-> khi sao chép xong, xóa thư mục nguồn
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;
}
}
Tệp và thư mục trong thực tế là các đối tượng trong S3. Bạn nên sử dụng PUT OBOG COPY để đổi tên chúng. Xem http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html
Python, Ruby, Java, C#, PHP, Node.js, Android, iOS, browser JavaScript
) làm và không có lý do gì để không sử dụng chúng aws.amazon.com/tools
S3DirectoryInfo có một phương thức MoveTo sẽ di chuyển một thư mục sang một thư mục khác, sao cho thư mục được di chuyển sẽ trở thành thư mục con của thư mục khác có cùng tên như ban đầu.
Phương thức mở rộng dưới đây sẽ di chuyển một thư mục sang thư mục khác, tức là thư mục đã di chuyển sẽ trở thành thư mục khác. Những gì nó thực sự làm là tạo thư mục mới, di chuyển tất cả nội dung của thư mục cũ vào đó, và sau đó xóa thư mục cũ.
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;
}
}
đổi tên tất cả các tệp * .csv.err trong <<bucket>>/landing
thư mục thành các tệp * .csv với 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)
Có một phần mềm mà bạn có thể chơi với thùng s3 để thực hiện các loại hoạt động khác nhau.
Tên phần mềm: Trình duyệt S3
Trình duyệt S3 là ứng dụng khách Windows miễn phí dành cho Amazon S3 và Amazon CloudFront. Amazon S3 cung cấp giao diện dịch vụ web đơn giản có thể được sử dụng để lưu trữ và truy xuất bất kỳ lượng dữ liệu nào, bất cứ lúc nào, từ bất kỳ đâu trên web. Amazon CloudFront là một mạng phân phối nội dung (CDN). Nó có thể được sử dụng để phân phối các tệp của bạn bằng cách sử dụng một mạng lưới toàn cầu của các vị trí cạnh.
Nếu chỉ một lần duy nhất thì bạn có thể sử dụng dòng lệnh để thực hiện các thao tác này:
(1) Đổi tên thư mục trong cùng một nhóm:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket/folder1/* s3://bucket/folder2/
(2) Đổi tên nhóm:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket1/folder/* s3://bucket2/folder/
Ở đâu,
{access_key} = Khóa truy cập hợp lệ của bạn cho máy khách s3
{secret_key} = Khóa scret hợp lệ của bạn cho máy khách s3
Nó hoạt động tốt mà không có vấn đề gì.
Cảm ơn