wake-up-neo.net

Wie benennt man Dateien und Ordner in Amazon S3 um?

Gibt es eine Funktion zum Umbenennen von Dateien und Ordnern in Amazon S3? Alle verwandten Vorschläge sind ebenfalls willkommen.

134
Shan

Es gibt keine direkte Methode zum Umbenennen der Datei in S3. Sie müssen die vorhandene Datei mit dem neuen Namen kopieren (einfach den Zielschlüssel setzen) und die alte löschen.

38
Naaz Muhammadh

Ich habe das gerade getestet und es funktioniert:

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

Sie können die AWS CLI-Befehle to mv den Dateien verwenden

17
Batsu

Ich habe gerade das funktioniert. Sie können das AWS SDK für PHP wie folgt verwenden:

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

Sie können entweder den Befehl AWS CLI oder den Befehl s3cmd verwenden, um die Dateien und Ordner im AWS S3-Bucket umzubenennen. 

Verwenden Sie mit S3cmd die folgende Syntax, um einen Ordner umzubenennen:

s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>

Verwenden Sie AWS CLI und verwenden Sie die folgende Syntax, um einen Ordner umzubenennen.

aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
11
Basheer.O

Es gibt keine Möglichkeit, einen Ordner über die grafische Benutzeroberfläche umzubenennen. Die schnellste (und einfachste, wenn Sie die grafische Benutzeroberfläche bevorzugen), um dies zu erreichen, ist das Erstellen einer einfachen alten Kopie. Um dies zu erreichen: Erstellen Sie den neuen Ordner in S3 über die GUI, rufen Sie den alten Ordner auf, markieren Sie alle, markieren Sie "Kopieren", navigieren Sie zum neuen Ordner und wählen Sie "Einfügen". Wenn Sie fertig sind, entfernen Sie den alten Ordner.

Diese einfache Methode ist sehr schnell, da sie von S3 auf sich selbst kopiert wird (kein erneutes Hochladen oder ähnliches) und außerdem die Berechtigungen und Metadaten der kopierten Objekte wie erwartet erhalten werden.

7
orcaman

Dies funktioniert zum Umbenennen der Datei in demselben Ordner

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

So machen Sie es in .NET mit S3 .NET SDK:

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

P.S. Verwenden Sie möglichst "Async" -Versionen der Client-Methoden, auch wenn ich dies aus Gründen der Lesbarkeit nicht getan habe

3
Alex

Dies ist jetzt für Dateien möglich. Wählen Sie die Datei aus und wählen Sie dann Mehr> Umbenennen in der GUI.

Um einen Ordner umzubenennen, müssen Sie stattdessen einen neuen Ordner erstellen und den Inhalt des alten Ordners auswählen und ihn kopieren/einfügen (wieder unter "Mehr").

3
Jethro

Wir haben zwei Möglichkeiten, wie wir eine Datei im AWS S3-Speicher umbenennen können:

1. Verwenden des CLI-Tools -

aws s3 --recursive mv s3: // bucket-name/dirname/oldfile s3: // bucket-name/dirname/newfile

2. Mit SDK

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

Es gibt eine Software, mit der Sie mit dem S3-Bucket verschiedene Arten von Operationen ausführen können.

Name der Software: S3 Browser

S3 Browser ist ein Freeware-Windows-Client für Amazon S3 und Amazon CloudFront. Amazon S3 bietet eine einfache Web-Services-Schnittstelle, mit der beliebige Datenmengen jederzeit und überall im Web gespeichert und abgerufen werden können. Amazon CloudFront ist ein Content Delivery Network (CDN). Damit können Sie Ihre Dateien über ein globales Netzwerk von Edge-Standorten bereitstellen.


Wenn es nur einmal ist, können Sie die Befehlszeile verwenden, um diese Vorgänge auszuführen:

(1) Benennen Sie den Ordner in demselben Bucket um:

s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket/folder1/* s3://bucket/folder2/

(2) Benennen Sie den Eimer um:

s3cmd --access_key={access_key} --secret_key={secret_key} mv s3://bucket1/folder/* s3://bucket2/folder/

Woher,

{access_key} = Ihr gültiger Zugriffsschlüssel für den s3-Client

{secret_key} = Ihr gültiger Geheimschlüssel für den s3-Client

Es funktioniert problemlos ohne Probleme.

Vielen Dank

0
Radadiya Nikunj

benennen Sie alle * .csv.err-Dateien im <<bucket>>/landing-Verzeichnis in * .csv-Dateien mit s3cmd um

 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

Datei und Ordner sind tatsächlich Objekte in S3. Sie sollten PUT OBJECT COPY verwenden, um sie umzubenennen. Siehe http://docs.aws.Amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

0
okwap

Wie von Naaz beantwortet, ist eine direkte Umbenennung von S3 nicht möglich.

ich habe ein Code-Snippet angehängt, das den gesamten Inhalt kopiert

code funktioniert, fügen Sie einfach Ihren aws-Zugriffsschlüssel und den geheimen Schlüssel hinzu

hier ist was ich im Code getan habe

-> kopiert den Inhalt des Quellordners (verschachtelte untergeordnete Ordner und Ordner) und fügt ihn in den Zielordner ein 

-> Wenn der Kopiervorgang abgeschlossen ist, löschen Sie den Quellordner

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

Unten ist das Codebeispiel zum Umbenennen der Datei auf s3. Meine Datei war Teil-000 * wegen Funken O/P-Datei, dann kopiere ich es auf einen anderen Dateinamen am gleichen Ort und löschen Sie die Teil-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 verfügt über eine MoveTo - Methode, mit der ein Verzeichnis in ein anderes Verzeichnis verschoben wird, sodass das verschobene Verzeichnis zu einem Unterverzeichnis des anderen Verzeichnisses wird, das denselben Namen wie zuvor hat.

Die Erweiterungsmethode unten verschiebt ein Verzeichnis in ein anderes Verzeichnis, d. H. Das verschobene Verzeichnis wird zum anderen Verzeichnis. In der Tat wird das neue Verzeichnis erstellt, der gesamte Inhalt des alten Verzeichnisses wird in das Verzeichnis verschoben und anschließend das alte gelöscht.

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

Wenn Sie in der AWS-Konsole zu S3 navigieren, werden Ihre Ordner aufgelistet. Wenn Sie zu dem Ordner navigieren, werden die Objekte aufgelistet. Rechtsklick und Sie können umbenennen. ODER Sie können das Kontrollkästchen vor Ihrem Objekt aktivieren und dann im Pulldown-Menü AKTIONEN die Option Umbenennen auswählen. Hat gerade für mich gearbeitet, 31.03.2009

0
1082E1984