2016-07-14 13 views
7

Veritabanı yedekleri içeren bir S3 paketim var. En son yedeklemeyi indirmek istediğim bir komut dosyası oluşturuyorum (ve sonunda başka bir yere geri yüklerim), ancak bir dosyadan en yeni dosyayı almamdan nasıl emin olacağımı bilmiyorum.En son dosyayı AWS CLI kullanarak bir S3 kepçesine mi yüklüyorsunuz?

AWS CLI araçlarını kullanarak yalnızca en yeni dosyayı s3 bir kovandan yerel bir dizine kopyalamak mümkün mü?

+0

Komut dosyası için ne kullanacaksınız? SDK, CLI ya da başka bir şey? Ayrıca arkadaki dosyaları nasıl adlandırıyorsunuz? S3 – error2007s

+0

En son ne demek istiyorsunuz? dosyaların farklı isimleri yok mu? – Shibashis

+0

s3 dosya sürümlerini kullanıyor musunuz? – Shibashis

cevap

13

Bu, yapabileceğiniz bir yaklaşımdır.

$ aws s3 ls $BUCKET --recursive 
2015-05-05 15:36:17   4 an_object.txt 
2015-06-08 14:14:44 16322599 some/other/object 
2015-04-29 12:09:29  32768 yet-another-object.sh 

Onlar anahtarla göre alfabetik sırayla ediyoruz, ama bu ilk sütun son değiştirilme zamanı:

Sen aws s3 ls $BUCKET --recursive ile kova tüm nesneleri listeleyebilirsiniz.

$ aws s3 ls $BUCKET --recursive | sort 
2015-04-29 12:09:29  32768 yet-another-object.sh 
2015-05-05 15:36:17   4 an_object.txt 
2015-06-08 14:14:44 16322599 some/other/object 

tail -n 1 son satırı seçer ve awk '{print $4}' dördüncü sütun (nesnenin adı) ayıklar: Hızlı bir sort tarihe göre bunları yeniden düzenlemek olacaktır.

$ KEY=`aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'` 
$ aws s3 cp s3://$BUCKET/$KEY ./latest-object 
0

Ve burada bir betik @ error2007s en Yanıta göre oluşturduğunuz geçerli:

$ aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}' 
some/other/object 

Son olarak, nesneyi indirmek için aws s3 cp içine bırakın. Bu betik, aws profilinizi ve kova adınızı değişkenler olarak gerektirir ve en son nesneyi ~/Downloads klasörünüze indirir:

#!/bin/sh 
PROFILE=your_profile 
BUCKET=your_bucket 

OBJECT="$(aws s3 ls --profile $PROFILE $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}')" 
aws s3 cp s3://$BUCKET/$OBJECT ~/Downloads/$OBJECT --profile $PROFILE 
İlgili konular