2016-07-14 262 views
7

我有一個包含數據庫備份的S3存儲桶。我正在創建一個腳本,我想下載最新的備份(並最終將其還原到其他地方),但我不知道如何才能從桶中獲取最新文件。使用AWS CLI下載S3存儲桶中的最新文件?

是否可以使用AWS CLI工具僅將最近的文件從s3存儲桶複製到本地目錄?

+0

你是什麼東西的腳本會用? SDK,CLI或其他東西?另外你怎麼命名後面的文件在S3 – error2007s

+0

你最近的意思是什麼?不要這些文件有不同的名字? – Shibashis

+0

你使用s3文件版本? – Shibashis

回答

13

這是您可以採取的方法。

可以列出在桶中的所有對象與aws s3 ls $BUCKET --recursive

$ 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 

他們通過按鍵的字母順序排序,但第一列是最後修改時間。快速sort將按日期重新排序:

$ 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選擇最後一排,和awk '{print $4}'提取第四列(對象的名稱)。

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

最後但並非最不重要的,丟棄到aws s3 cp下載對象:

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

這裏是一個bash腳本創建基於@ error2007s的答案。這個腳本需要您的AWS簡介和水桶名作爲變量,並下載最新的對象在你的〜/ Downloads文件夾:

#!/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 
相關問題