Jawaban:
Tidak ada metode langsung untuk mengubah nama file di S3. Yang harus Anda lakukan adalah menyalin file yang ada dengan nama baru (hanya mengatur kunci target) dan menghapus yang lama.
Saya baru saja menguji ini dan berhasil:
aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
--recursive
?
s3://<bucketname>/<folder_name_from>
, yaitu 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
diikuti oleh rm
lebih disukai mv
?
Anda bisa menggunakan perintah AWS CLI atau s3cmd untuk mengganti nama file dan folder dalam AWS S3 bucket.
Menggunakan S3cmd, gunakan sintaks berikut untuk mengubah nama folder,
s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Menggunakan AWS CLI, gunakan sintaks berikut untuk mengubah nama folder,
aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Saya baru saja bekerja. Anda dapat menggunakan AWS SDK untuk PHP seperti ini:
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
Kami memiliki 2 cara dimana kami dapat mengganti nama file di penyimpanan AWS S3 -
1. Menggunakan alat CLI -
aws s3 - rekursif mv s3: // bucket-name / dirname / oldfile s3: // bucket-name / dirname / newfile
2.Menggunakan SDK
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));
Tidak ada cara untuk mengganti nama folder melalui GUI, cara tercepat (dan termudah jika Anda suka GUI) untuk mencapai ini adalah dengan melakukan salinan lama. Untuk mencapai ini: buat folder baru di S3 menggunakan GUI, buka folder lama Anda, pilih semua, tandai "salin" dan kemudian navigasikan ke folder baru dan pilih "tempel". Setelah selesai, hapus folder lama.
Metode sederhana ini sangat cepat karena merupakan salinan dari S3 ke dirinya sendiri (tidak perlu mengunggah kembali atau semacamnya) dan juga mempertahankan izin dan metadata dari objek yang disalin seperti yang Anda harapkan.
Inilah cara Anda melakukannya di .NET, menggunakan S3 .NET SDK
:
var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);
PS mencoba menggunakan versi "Async" dari metode klien jika memungkinkan, meskipun saya belum melakukannya untuk keterbacaan
Ini berfungsi untuk mengganti nama file di folder yang sama
aws s3 mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv
Di bawah ini adalah contoh kode untuk mengganti nama file di s3. File saya adalah bagian-000 * karena percikan file / p, maka saya menyalinnya ke nama file lain di lokasi yang sama dan menghapus bagian-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)
Di konsol AWS, jika Anda menavigasi ke S3, Anda akan melihat folder Anda terdaftar. Jika Anda menavigasi ke folder, Anda akan melihat objek terdaftar. klik kanan dan Anda dapat mengganti nama. ATAU, Anda dapat mencentang kotak di depan objek Anda, lalu dari menu pull down bernama TINDAKAN, Anda dapat memilih ganti nama. Hanya bekerja untuk saya, 3-31-2019
Seperti yang dijawab oleh Naaz, penggantian nama langsung s3 tidak dimungkinkan.
saya telah melampirkan cuplikan kode yang akan menyalin semua konten
kode berfungsi, tambahkan saja kunci akses aws dan kunci rahasia Anda
inilah yang saya lakukan dalam kode
-> salin isi folder sumber (anak bersarang dan folder) dan disisipkan di folder tujuan
-> ketika penyalinan selesai, hapus folder sumber
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;
}
}
File dan folder sebenarnya objek dalam S3. Anda harus menggunakan PUT OBJECT COPY untuk mengganti nama mereka. Lihat http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html
Python, Ruby, Java, C#, PHP, Node.js, Android, iOS, browser JavaScript
) melakukannya dan tidak ada alasan untuk tidak menggunakannya aws.amazon.com/tools
S3DirectoryInfo memiliki metode MoveTo yang akan memindahkan satu direktori ke direktori lain, sehingga direktori yang dipindahkan akan menjadi subdirektori dari direktori lain dengan nama yang sama seperti aslinya.
Metode ekstensi di bawah ini akan memindahkan satu direktori ke direktori lain, yaitu direktori yang dipindahkan akan menjadi direktori lainnya. Apa yang sebenarnya dilakukannya adalah membuat direktori baru, memindahkan semua isi direktori lama ke dalamnya, dan kemudian menghapus yang lama.
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;
}
}
ganti nama semua file * .csv.err di <<bucket>>/landing
dir menjadi file * .csv dengan 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)
Ada satu perangkat lunak tempat Anda dapat bermain dengan s3 bucket untuk melakukan berbagai jenis operasi.
Nama Perangkat Lunak: Browser S3
S3 Browser adalah klien Windows freeware untuk Amazon S3 dan Amazon CloudFront. Amazon S3 menyediakan antarmuka layanan web sederhana yang dapat digunakan untuk menyimpan dan mengambil sejumlah data, kapan saja, dari mana saja di web. Amazon CloudFront adalah jaringan pengiriman konten (CDN). Ini dapat digunakan untuk mengirimkan file Anda menggunakan jaringan global lokasi tepi.
Jika hanya satu kali maka Anda dapat menggunakan baris perintah untuk melakukan operasi ini:
(1) Ganti nama folder dalam ember yang sama:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket/folder1/* s3://bucket/folder2/
(2) Ganti nama Ember:
s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket1/folder/* s3://bucket2/folder/
Dimana,
{access_key} = Kunci akses Anda yang valid untuk klien s3
{secret_key} = Kunci scret Anda yang valid untuk klien s3
Ini berfungsi dengan baik tanpa masalah.
Terima kasih