it-swarm.com.ru

Как переименовать файлы и папки в Amazon S3?

Есть ли какая-нибудь функция для переименования файлов и папок в Amazon S3? Любые связанные предложения также приветствуются.

134
Shan

Прямой метод переименования файла в s3 отсутствует. что вам нужно сделать, это скопировать существующий файл с новым именем (просто установите целевой ключ) и удалить старый.

38
Naaz Muhammadh

Я только что проверил это, и это работает:

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

Вы можете использовать команды AWS CLI to mv файлы

17
Batsu

Я только что получил это работает. Вы можете использовать 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

14
Tom
aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive
aws s3 rm s3://source_folder --recursive
13
Thang Tran

Вы можете использовать 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>
11
Basheer.O

Нет способа переименовать папку через GUI, самый быстрый (и самый простой, если вам нравится GUI) способ добиться этого - выполнить простую старую копию. Для этого: создайте новую папку на S3 с помощью графического интерфейса, перейдите в старую папку, выберите все, отметьте «копировать», а затем перейдите к новой папке и выберите «вставить». Когда закончите, удалите старую папку.

Этот простой метод очень быстр, потому что он копирует из S3 в себя (не нужно повторно загружать или что-то в этом роде), и он также поддерживает разрешения и метаданные скопированных объектов, как вы ожидаете.

7
orcaman

Это работает для переименования файла в той же папке

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

Вот как вы делаете это в .NET, используя S3 .NET SDK:

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

Постскриптум попробуйте использовать "Async" версии клиентских методов, где это возможно, хотя я не сделал этого для удобства чтения

3
Alex

Теперь это возможно для Файлов, выберите файл, затем выберите Дополнительно> Переименовать в графическом интерфейсе.

Чтобы переименовать папку, вам вместо этого нужно создать новую папку, выбрать содержимое старой и скопировать/вставить ее (снова под «Еще»)

3
Jethro

У нас есть 2 способа переименовать файл в хранилище AWS S3:

1. Используя инструмент CLI -

aws s3 - рекурсивный mv s3: // имя сегмента/dirname/oldfile s3: // имя сегмента/dirname/newfile

2. Использование SDK

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

Существует одно программное обеспечение, в котором вы можете играть с ведром s3 для выполнения различных видов операций.

Название программного обеспечения: S3 Browser

Браузер S3 - это бесплатный клиент Windows для Amazon S3 и Amazon CloudFront. Amazon S3 предоставляет простой интерфейс веб-сервисов, который можно использовать для хранения и извлечения любого объема данных в любое время из любой точки сети. Amazon CloudFront - это сеть доставки контента (CDN). Его можно использовать для доставки ваших файлов через глобальную сеть Edge местоположений.


Если это только один раз, то вы можете использовать командную строку для выполнения этих операций:

(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

Работает нормально без проблем.

Спасибо

0
Radadiya Nikunj

переименуйте все файлы * .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)
0
Yordan Georgiev

Файл и папка фактически являются объектами в S3. Вы должны использовать PUT OBJECT COPY, чтобы переименовать их. Смотрите http://docs.aws.Amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

0
okwap

Как ответил Нааз, прямое переименование s3 невозможно.

я приложил фрагмент кода, который будет копировать все содержимое

код работает, просто добавьте свой ключ доступа 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;
}

}

0
Mateen

Ниже приведен пример кода для переименования файла на s3. Мой файл был part-000 * из-за файла spark o/p, затем я скопировал его в другое имя файла в том же месте и удалил part-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)
0
Vikas

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

В консоли AWS, если вы перейдете к S3, вы увидите свои папки в списке. Если вы перейдете к папке, вы увидите объект (ы) в списке. щелкните правой кнопкой мыши, и вы можете переименовать. ИЛИ, вы можете поставить галочку напротив вашего объекта, затем из выпадающего меню с именем ACTIONS вы можете выбрать переименовать. Просто работал для меня, 3-31-2019

0
1082E1984