2017-06-06 4 views
0

Je recherche toutes les méthodes pour déplacer/copier les données d'un dossier à un autre dans le compartiment AWS S3.Déplacer/copier des données d'un dossier à un autre sur AWS S3


Méthode 1: Via AWS CLI (plus facile)

Téléchargez et installez awscli sur ur par exemple, je me sers ici fenêtres (64-bit link), et lancer "configure ASW" pour remplir votre configuration et il suffit d'exécuter cette commande unique sur cmd

aws s3 cp s3://from-source/ s3://to-destination/ --recursive 

ici cp pour copier et récursive de copier tous les fichiers


Méthode 2: Via AWS CLI en utilisant python

import os 
import awscli 
if os.environ.get('LC_CTYPE', '') == 'UTF-8': 
    os.environ['LC_CTYPE'] = 'en_US.UTF-8' 

from awscli.clidriver import create_clidriver 
driver = create_clidriver() 
driver.main('s3 mv s3://staging/AwsTesting/research/ s3://staging/AwsTesting/research_archive/ --recursive'.split()) 

Même cela a fonctionné pour moi parfaitement


Méthode 3: Via Boto en utilisant python

import boto3 
s3 = boto3.resource('s3') 
copy_source = { 
    'Bucket': 's3://staging/', 
    'Key': 'AwsTesting/research/' 
} 
s3.meta.client.copy(copy_source, ''s3://staging/'', 'AwsTesting/research_archive/') 

Avec ma compréhension, je suppose ed la « clé » pour seau est juste le préfixe du dossier, donc je l'ai mentionné le chemin du dossier ici

Erreur:

Invalid bucket name "s3://staging": Bucket name must match the regex "^[a-zA-Z0-9.-_]{1,255}$"

Même je l'ai changé au nom simple seau comme « mise en scène », mais sans succès.


Comment puis-je comprendre la connectivité de seau via boto et le concept de cette clé?

+0

Je ne vois aucune raison dans les docs de croire que 's3.meta.client.copy' copie autre chose qu'un seul objet. * "Copier un objet d'un emplacement S3 à un autre C'est un transfert géré qui effectuera une copie en plusieurs parties dans plusieurs threads si nécessaire." * Une "copie en plusieurs parties" ne signifie pas plusieurs objets. Cela signifie qu'un seul objet est copié à l'aide de plusieurs transactions HTTP, chacune gérant des plages d'octets différentes. –

Répondre

0
import boto3 
s3 = boto3.resource('s3') 
copy_source = { 
    'Bucket': 'staging', 
    'Key': 'AwsTesting/research/filename.csv' 
} 
s3.meta.client.copy(copy_source, 'staging', 'AwsTesting/')