Есть ли какая-либо функция для переименования файлов и папок в Amazon S3? Любые соответствующие предложения также приветствуются.
Как переименовать файлы и папку в Amazon S3?
Ответ 1
Прямого метода переименования файла в s3 нет. что вам нужно сделать, это скопировать существующий файл с новым именем (просто установите целевой ключ) и удалить старый.
Ответ 2
Я только что испытал это, и он работает:
aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
Ответ 3
Вы можете использовать AWS команды консоли для mv
файлов
Ответ 4
У меня только что получилось. Вы можете использовать AWS SDK для PHP следующим образом:
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
Ответ 5
aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive
aws s3 rm s3://source_folder --recursive
Ответ 6
Вы можете использовать команду AWS CLI или s3cmd для переименования файлов и папок в ведро AWS S3.
Используя 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>
Ответ 7
Невозможно переименовать папку через графический интерфейс, самый быстрый (и самый простой, если вам нравится GUI) способ добиться этого - выполнить обычную старую копию. Для этого: создайте новую папку на S3 с помощью графического интерфейса, перейдите в свою старую папку, выберите все, отметьте "копировать", а затем перейдите в новую папку и выберите "вставить". После этого удалите старую папку.
Этот простой метод очень быстрый, потому что это копии из S3 для себя (нет необходимости повторно загружать или что-то в этом роде), а также поддерживает разрешения и метаданные скопированных объектов, как вы ожидали.
Ответ 8
Это работает для переименования файла в той же папке
aws s3 mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv
Ответ 9
Вот как вы делаете это в .NET, используя S3.NET SDK
:
var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);
PS старайтесь использовать "асинхронные" версии клиентских методов, где это возможно, хотя я не сделал этого для удобства чтения
Ответ 10
Теперь это возможно для Файлов, выберите файл, затем выберите Дополнительно> Переименовать в графическом интерфейсе.
Чтобы переименовать папку, вам вместо этого нужно создать новую папку, выбрать содержимое старой и скопировать/вставить ее (снова под "Еще")
Ответ 11
Файл и папка на самом деле являются объектами в S3. Вы должны использовать PUT OBJECT COPY, чтобы переименовать их. См. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html
Ответ 12
Как ответил Нааз, прямое переименование 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;
}
}
Ответ 13
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;
}
}
Ответ 14
Существует одно программное обеспечение, где вы можете играть с ведром s3 для выполнения различных видов операций.
Название программного обеспечения: S3 Browser
Браузер S3 - это бесплатный клиент Windows для Amazon S3 и Amazon CloudFront. Amazon 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
Работает нормально без проблем.
Спасибо
Ответ 15
переименуйте все файлы *.csv.err в каталоге <<bucket>>/landing
в файлы *.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)