2016-12-19 5 views
-1

bashスクリプトを使用して「DITN1_」と「DITS1_」時刻を含むファイル名に従って5日以上経過したファイルのみを削除しようとしていますAWS S3バケット内が、問題は、私は次のようにのようなルックスを削除しようとしているすべてのファイルです:BashスクリプトAWS S3バケットすべてのファイルを名前を使用して削除します

DITN1_2016.12.01_373、 DITS1_2012.10.10_141、 DITN1_2016.12.01_3732、 DITS1_2012.10.10_1412

誰かがコードで私を助けることができればいいと思う。それは詳細については、タイムスタンプ

をサポートしていません。しかし、あなたは

aws s3 rm s3://mybucket/ --recursive --include "mybucket/DITN1*" 

を次のようにbashスクリプトを使用したものを削除するためのAWS CLIコマンドを使用することができ、事前

+0

これはコード作成サービスではありません。これまでに何を試しましたか?あなたのコードを投稿してください!あなたがそれを走らせたとき何が起こったのですか?代わりに何が起こると思いますか?具体的に何が問題になっていますか? https://stackoverflow.com/help/mcve – Robert

答えて

0
を見ます

メタデータの代わりにオブジェクトの名前を使用することは重要ですか?あなたはs3apiを使用してバケット内のオブジェクトのリストを取得できます。

aws s3api list-objects --bucket example --no-paginate # this last option will avoid pagination, don't use it if you have thousands of objects 

--query Contents[] 

を追加することを教えてくれますLastModifiedのセクションを含むすべてのオブジェクトの内容を、あなたに戻って得られますオブジェクトが最後に変更されました。たとえば、 "2016-12-16T13:56:23.000Z"です。 5日 -

http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html

あなたは

date "+%s" -d "put the timestamp here" 

を使用してエポック現在の時間とそれを比較するには、このタイムスタンプを変更することができます。あなたが本当に名前に基づいてオブジェクトを削除したい場合は

OR、あなたはこのようなキーをループできます

for key in $(aws s3api list-objects --bucket example --no-paginate --query Contents[].Key) 

と日付を決定するためのロジックを追加します。 - 5日

key_without_prefix=${key#*_} 
key_without_suffix=${key_without_prefix%_*} 

次にあなたが現在時刻と比較することができ、あなたの日付を持っています。このような何かはあなたの例から判断すると、動作する可能性があります。

+0

可能であれば、これを行うためのコードを提供してください。 –

+0

私に教えてくれてありがとう、しかし可能ならば、これを行うための可能なコードを提供してください。今のところ、5日以上経過したオブジェクトをすべて削除しようとしている2つのs3バケットと、オブジェクト名に「DITN1_」と「DITS1_」が含まれているとします。 if ["$ EC2_REGION" = "us-west-2"];次に、BUCKET = vz-app-nts-ivav-qa-vz-app-nts-ivav-ditn1-s3bucket-s3u ca5imooh forキーを押します(aws s3api list-objects --bucket BUCKET --no-paginate --query目次[]。Key)elseバケツ= vz-app-nts-ivav-dev-vz-ivav-nts-1991-dev-s3bucket-11o f49nc4qhem fi' –

+0

私はこの機能を自動化しようとしているので、 5日以上経過したすべてのオブジェクトと、「DITN1_」および「DITS1_」を含むオブジェクト名 –

関連する問題