Güncelleme
As Alberge tarafından işaret (+1), günümüzde mükemmel AWS Komut Satırı Arabirimi (neredeyse) her şeyi AWS ile etkileşim için çok yönlü bir yaklaşım sağlar - bu arada en hizmetlerin API'leri kapsar ve ayrıca özellikleri üst düzey S3 komutları ile başa çıkmak için senin özel olarak kullanın, S3 için AWS CLI referansına bakın :
- sync - Dizinleri ve S3 öneklerini senkronize eder. Kullanım durumunuz Örnek 2 kapsamındadır (daha ayrıntılı kullanım
--exclude,--include vb taşıma önek de kullanılabilir):
Aşağıdaki sync komutu, s3 nesnelerini kopyalayarak, belirli bir önek ve paket altındaki nesneleri, belirtilen başka bir önek ve paket altındaki nesnelere senkronize eder. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Tamlık için, daha düşük seviyeli S3 komutlarının s3api alt komutu aracılığıyla hala mevcut olduğundan bahsedeceğim ; bu, herhangi bir SDK tabanlı çözümü, daha yüksek seviye işlevselliğini nihayetinde benimsemeden önce doğrudan AWS CLI'ye çevirmeye izin verecektir.
İlk Cevap
Dosyaları S3 paketleri arasında taşımak, PUT Object - Copy API (ardından DELETE Object ) aracılığıyla gerçekleştirilebilir:
PUT işleminin bu uygulaması, Amazon S3'te zaten depolanan bir nesnenin bir kopyasını oluşturur. Bir PUT kopyalama işlemi, bir GET ve ardından bir PUT gerçekleştirmekle aynıdır. İstek başlığı x-amz-copy-source eklenmesi, PUT işleminin kaynak nesneyi hedef pakete kopyalamasını sağlar. Kaynak
Mevcut tüm AWS SDK'ları için ilgili örnekler vardır, bkz . Tek Bir İşlemde Nesneleri Kopyalama . Doğal olarak, komut dosyası tabanlı bir çözüm burada bariz ilk tercih olacaktır, bu nedenle Ruby için AWS SDK Kullanarak Bir Nesneyi Kopyalayın iyi bir başlangıç noktası olabilir; Bunun yerine Python'u tercih ederseniz, aynısı boto ile de elde edilebilir, tabii ki copy_key()boto'nun S3 API dokümantasyonundaki yönteme bakın .
PUT Objectyalnızca dosyaları kopyalar; bu nedenle, DELETE Objectbaşarılı bir kopyalama işleminden sonra bir dosyayı hareketsiz olarak açıkça silmeniz gerekir , ancak bu, grubu ve dosya adlarını işleyen genel komut dosyası yerine geldiğinde yalnızca birkaç satır daha olacaktır (ilgili örnekler de vardır) bkz. örneğin İstek Başına Bir Nesneyi Silme ).