2015-05-11 27 views

cevap

14

boto S3 belgeleriniz sorunuzu yanıtlıyor. Başka yoluyla boto bir kova

https://github.com/boto/boto/blob/develop/docs/source/s3_tut.rst

Hareketli dosyalar etkin bir kaynaktan kaynağından anahtarını çıkartarak daha hedefe anahtarlarının bir kopyasıdır.

import boto 

c = boto.connect_s3() 
src = c.get_bucket('my_source_bucket') 
dst = c.get_bucket('my_destination_bucket') 

ve anahtarları yineleme:

Sen kovalar erişebilirsiniz

for k in src.list(): 
    # copy stuff to your destination here 
    dst.copy_key(k.key.name, src, k.key.name) 
    # then delete the source key 
    k.delete() 

Ayrıca bakınız: Is it possible to copy all files from one S3 bucket to another with s3cmd?

+0

Sorunuz, dosyaları nasıl kopyalayacağınız ...? – Gal

+2

Bu, muhtemelen bunu yapmanın en iyi yoludur. Sürümünüzde varsa orijinal kovanın içinde kalan gölgeler olacağını unutmayın. Ayrıca, kopyanızı bir denemeye sarmak isteyebilirsiniz: bir kopyanızı almadan önce silmemenizi bekleyebilirsiniz. Ayrıca kopyaları kopyalayıp izleyebilir ve daha sonra dst kepçesinden geçebilir ve bir key.lookup() yapabilir ve orada olduğundan emin olabilirsiniz, eğer öyleyse ve o zaman orig.delete() yaparsınız. – cgseller

+0

Gal: tuşlar nesnelerdir ve nesneler içindekiler içerir. Anahtarı taşıyarak 'dosyayı' etkili bir şekilde hareket ettirirsiniz. Bilgisayarınızdaki bir dosyayı kopyaladığınızda dosya tanıtıcısını dosya sisteminde taşımayı düşünün, kaputun altında aynı metodolojidir. – cgseller

2

Grubun adı dizesi değil kova nesne olmalıdır. değişimin altında

for k in src.list(): 
    dst.copy_key(k.key, src.name, k.key) 
2

awscli 30 kat daha hızlı benim için başa çıkma ve her anahtar silme boto daha iş yapar benim için çalıştı. Muhtemelen awscli'deki çoklu okumaya bağlı. Hala ondan kabuk komutlarını çağırma olmadan piton komut çalıştırmak istiyorsanız, böyle bir şey deneyebilirsiniz:

awscli piton paketini yükleyin:

sudo pip install awscli 

Ve sonra bu kadar basittir: Eğer boto3 kullanıyorsanız

import os 
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 source_bucket target_bucket --recursive'.split()) 
+0

Ortam değişkenlerimde ayarlama yapmadan ayarları buraya nasıl verebilirim –

+0

Kolay bir yol bilmeyin. Sürücüyü çalıştırmadan önce env değişkenlerini python'dan ayarlayacağım. –

+0

Ancak bsc dayalı awscli değil mi? – gtd

3

(yeni boto sürüm) bu oldukça basit

import boto3 
s3 = boto3.resource('s3') 
copy_source = { 
    'Bucket': 'mybucket', 
    'Key': 'mykey' 
} 
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') 

(Docs)