2016-07-14 8 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 
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 

彼らはキーでアルファベット順にソートしているが、それ最初の列は、最終更新時刻です:

あなたはaws s3 ls $BUCKET --recursiveでバケット内のすべてのオブジェクトを一覧表示することができます。

$ 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}'は、第4列(オブジェクト名)を抽出:クイックsort日付によってそれらの順序を変更します。

$ 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 s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}' 
some/other/object 

なく、少なくとも最後に、オブジェクトをダウンロードするaws s3 cpにそのドロップします。このスクリプトでは、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 
関連する問題