2010-08-04 10 views

cevap

11

Eğer aws-s3 gemini kullanıyorsanız, şu kod BREKET_NAME ürün grubundaki OLD_FOLDER_NAME klasörünü NEW_FOLDER_NAME olarak yeniden adlandırır:

bsize = OLD_FOLDER_NAME.size 
bucket = AWS::S3::Bucket.find(BUCKET_NAME) 
bucket.objects({:prefix=>OLD_FOLDER_NAME}).each do |o| 
    AWS::S3::S3Object.rename(o.key, NEW_FOLDER_NAME + o.key[bsize..-1], BUCKET_NAME) 
end 

İşte bu kadar. Klasörler gerçek nesneler değildir, bu nedenle tek yapmanız gereken yeni yolun o belirli yolunda yer alan tüm nesneleri yeniden adlandırmaktır. Sonuç olarak sanal klasör yeniden adlandırılacaktır.

+0

Bu, klasörü yeniden adlandırır, ancak klasörün içeriği herkese açıksa, yeniden adlandırılırken bu izinler kaybolur. – jpwynn

+0

, rename() için 4. parametre olarak açık izni ekledi izinleri ayarlar: access =>: public_read olsa da yeniden adlandırma sırasında izinleri korumanın bir yolu vardır – jpwynn

1

BucketExplorer'ı Kullanın! Bu harika bir uygulama! Anlayacağınız her şeyi çok daha kolay bir şekilde gerçekleştirebilirsiniz. GUI

+0

Açıkçası, fikirler için hala açığım ama bu, bulduğum en iyi seçenekdi. – Trip

+0

Bu çözümün, bir klasörün yeniden adlandırılması için sistem düzeyindeki değişikliklerin birçoğunu tanıtan Java7'nin yüklenmesini gerektirmediği gerçeğini kabul etmemiştim. Çok kötü onlar büyük bir java bağımlılıkları baş ağrısı olmadan 'gerçek' bir uygulama olarak yazmıyorlar. – jpwynn

8

AWS Command Line Interface gibi şeyler böyle yapmak için yeni bir yoldur. Bunu kullanarak, böyle bir klasör yeniden adlandırabilirsiniz:

aws s3 mv --recursive s3://bucketname/oldfoldername s3://bucketname/newfoldername 

emin olun ve bunu, ona yapacak ne düşündüğünü yapacak emin olmak için --dryrun seçeneğiyle başlar.

1

S3 Yönetim Konsolu'nu kullanırsanız, kesebilir ve yapıştırabilirsiniz. İstediğiniz klasöre gidin, Ctrl + A'yı tıklayın, ardından Eylemler> Kes'i tıklayın. Yeni klasörünüzü yapın ve İşlemler> Yapıştır'ı tıklayın.

İlgili konular