121 votes

AWS S3 copie les fichiers et les dossiers entre deux compartiments

Je cherchais un outil pour m'aider à copier le contenu d'un compartiment S3 dans un deuxième compartiment sans télécharger le contenu au préalable sur un système local.

J'ai essayé l'option de copie de la console AWS S3, mais certains fichiers imbriqués ont disparu.

J'ai essayé d'utiliser l'application Transmit (Panic), mais la commande dupliquée copie les fichiers d'abord sur le système local, puis sur vers le second compartiment.

185voto

Layke Points 10216

Copier entre les godets S3

AWS (récemment) a publié une interface de ligne de commande pour la copie entre compartiments.

http://aws.amazon.com/cli/

 $ aws s3 sync s3://mybucket-src s3://mybucket-target --exclude *.tmp
..
 

Cela va copier d'un compartiment cible à un autre.

Voir la documentation ici: Documentation S3 CLI

43voto

Trevor Rowe Points 2072

Un exemple simplifié utilisant le joyau aws-sdk:

 AWS.config(:access_key_id => '...', :secret_access_key => '...')
s3 = AWS::S3.new
s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key')
 

Si vous souhaitez effectuer la copie entre différents compartiments, spécifiez le nom du compartiment cible:

 s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key', :bucket_name => 'target-bucket')
 

41voto

KDEx Points 1686

Vous pouvez maintenant le faire depuis l'interface d'administration S3. Il suffit d'aller dans un compartiment pour sélectionner tous vos dossiers actions->copy . Puis déplacez-vous dans votre nouveau compartiment actions->paste .

9voto

mikhailov Points 4981

C'est possible avec la gemme aws-sdk récente, voir l'exemple de code:

 require 'aws-sdk'

AWS.config(
  :access_key_id     => '***',
  :secret_access_key => '***',
  :max_retries       => 10
)

file     = 'test_file.rb'
bucket_0 = {:name => 'bucket_from', :endpoint => 's3-eu-west-1.amazonaws.com'}
bucket_1 = {:name => 'bucket_to',   :endpoint => 's3.amazonaws.com'}

s3_interface_from = AWS::S3.new(:s3_endpoint => bucket_0[:endpoint])
bucket_from       = s3_interface_from.buckets[bucket_0[:name]]
bucket_from.objects[file].write(open(file))

s3_interface_to   = AWS::S3.new(:s3_endpoint => bucket_1[:endpoint])
bucket_to         = s3_interface_to.buckets[bucket_1[:name]]
bucket_to.objects[file].copy_from(file, {:bucket => bucket_from})
 

plus de détails: Comment copier un fichier sur plusieurs compartiments en utilisant aws-s3 gem

5voto

Josnidhin Points 5408

La caisse de la documentation ci-dessous. Je suppose que c'est ce que vous cherchez. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html

RightAws du gem S3Interface a une de fonctions de copie qui ne le ci-dessus.

http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X