web-dev-qa-db-fra.com

Comment renommer des fichiers et des dossiers dans Amazon S3?

Existe-t-il une fonction permettant de renommer des fichiers et des dossiers dans Amazon S3? Toutes les suggestions connexes sont également les bienvenues.

134
Shan

Il n'y a pas de méthode directe pour renommer le fichier dans s3. Ce que vous devez faire est de copier le fichier existant avec un nouveau nom (il suffit de définir la clé cible) et de supprimer l'ancien.

38
Naaz Muhammadh

Je viens de tester cela et ça marche:

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

Vous pouvez utiliser les commandes AWS CLI to mv the files

17
Batsu

Je viens d'avoir ce travail. Vous pouvez utiliser le kit AWS SDK pour PHP comme suit:

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

Vous pouvez utiliser la commande AWS CLI ou s3cmd pour renommer les fichiers et les dossiers du compartiment AWS S3. 

Avec S3cmd, utilisez la syntaxe suivante pour renommer un dossier.

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

Avec AWS CLI, utilisez la syntaxe suivante pour renommer un dossier.

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

Il n'y a aucun moyen de renommer un dossier via l'interface graphique, le moyen le plus rapide (et le plus simple si vous aimez l'interface graphique) d'y parvenir consiste à effectuer une copie ancienne simple. Pour ce faire: créez le nouveau dossier sur S3 à l'aide de l'interface graphique, accédez à votre ancien dossier, sélectionnez tout, cochez «Copier», puis naviguez jusqu'au nouveau dossier et choisissez «Coller». Lorsque vous avez terminé, supprimez l'ancien dossier.

Cette méthode simple est très rapide car il s'agit de copies de S3 vers lui-même (pas besoin de re-télécharger ou quoi que ce soit de ce genre) et elle conserve également les autorisations et les métadonnées des objets copiés, comme vous le souhaiteriez.

7
orcaman

Cela fonctionne pour renommer le fichier dans le même dossier

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

Voici comment vous le faites dans .NET, en utilisant S3 .NET SDK:

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

P.S. essayez d'utiliser des versions "asynchrones" des méthodes client dans la mesure du possible, même si je ne l'ai pas déjà fait par souci de lisibilité

3
Alex

Cela est désormais possible pour Fichiers, sélectionnez le fichier, puis sélectionnez Plus> Renommer dans l'interface graphique.

Pour renommer un dossier, vous devez plutôt créer un nouveau dossier, sélectionner le contenu de l'ancien et le copier/coller (à nouveau sous "Plus")

3
Jethro

Nous avons deux façons de renommer un fichier sur le stockage AWS S3:

1 .Utilisation de l’outil CLI -

aws s3 --recursive mv s3: // nom de compartiment/nom de répertoire/ancien fichier s3: // nom de compartiment/nom de répertoire/nouveau fichier

2.Utilisation du SDK

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

Il existe un logiciel où vous pouvez jouer avec le compartiment s3 pour effectuer différents types d'opérations.

Nom du logiciel: Navigateur S3

Navigateur S3 est un client Windows gratuit pour Amazon S3 et Amazon CloudFront. Amazon S3 fournit une interface de services Web simple pouvant être utilisée pour stocker et récupérer toute quantité de données, à tout moment, de n'importe où sur le Web. Amazon CloudFront est un réseau de distribution de contenu (CDN). Il peut être utilisé pour livrer vos fichiers en utilisant un réseau mondial d'emplacements Edge.


Si ce n'est qu'une seule fois, vous pouvez utiliser la ligne de commande pour effectuer les opérations suivantes:

(1) Renommez le dossier dans le même compartiment:

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

(2) renommer le seau:

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

Où,

{clé_accès} = Votre clé d'accès valide pour le client s3

{secret_key} = Votre clé scret valide pour le client s3

Cela fonctionne bien sans aucun problème.

Merci

0
Radadiya Nikunj

renommer tous les fichiers * .csv.err du répertoire <<bucket>>/landing en fichiers * .csv avec 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

Le fichier et le dossier sont en fait des objets dans S3. Vous devez utiliser PUT OBJECT COPY pour les renommer. Voir http://docs.aws.Amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

0
okwap

Comme l'a répondu Naaz, il n'est pas possible de renommer directement s3.

j'ai joint un extrait de code qui va copier tout le contenu

le code fonctionne il suffit d'ajouter votre clé d'accès aws et votre clé secrète

voici ce que j'ai fait dans le code

-> copier le contenu du dossier source (enfant et dossiers imbriqués) et coller dans le dossier de destination 

-> une fois la copie terminée, supprimez le dossier source

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

Vous trouverez ci-dessous un exemple de code permettant de renommer un fichier sur s3. Mon fichier faisait partie-000 * à cause du fichier spark o/p, puis je le copie dans un autre nom de fichier au même emplacement et supprime la partie-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 a une méthode MoveTo qui déplacera un répertoire dans un autre répertoire, de sorte que le répertoire déplacé deviendra un sous-répertoire de l’autre répertoire du même nom qu’il l’avait initialement.

La méthode d’extension ci-dessous déplacera un répertoire dans un autre répertoire, c’est-à-dire que le répertoire déplacé deviendra l’autre répertoire. En réalité, il crée le nouveau répertoire, y déplace tout le contenu de l'ancien répertoire, puis supprime l'ancien.

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

Dans la console AWS, si vous accédez à S3, vos dossiers seront répertoriés. Si vous naviguez dans le dossier, vous verrez les objets listés. clic droit et vous pouvez renommer. OU, vous pouvez cocher la case devant votre objet, puis sélectionner dans le menu déroulant nommé ACTIONS, renommer. Je viens de travailler pour moi, 31-03-2019

0
1082E1984