2016-10-29 14 views
0

S3バケットの多くのサブディレクトリからローカルマシンにファイルをコピーする必要があります。ファイル名は自動生成されており、最初にlsを使用せずに取得するのは難しいですが、ターゲットファイルは常にサブフォルダの2番目のファイルであることがわかります。ファイルインデックスを使用してS3バケットからローカルマシンにファイルをコピーする

インデックスでs3バケットサブフォルダファイル内のファイルを参照する方法はありますか?

私はaws cliでこれを行うことを構想していますが、私は他の提案にも触れています。

+0

質問をサンプルディレクトリ構造で更新し、ダウンロードしたいファイルを強調表示できますか? –

答えて

1

私は、指定されたプレフィックスにすべてのオブジェクトをリストし、その後そのリストを日付で明示的にソートすることなく、2番目に古いオブジェクトをリストするS3内の方法については気づいていません。あなたは、ここにこれを実行する必要がある場合はいくつかのアイデアです:

  1. オブジェクトのみがこれまでに追加された場合(削除されません)オブジェクトがアップロードされている場合、あなたはおそらく、あなたが簡単に検索することができ、そのキーの命名規則を使用することができます2番目に古いオブジェクト、例えば0001-xxx、0002-xxx。その後、接頭辞0002を持つオブジェクトをリストすることで、2番目に古いオブジェクトを見つけることができます。
  2. RDBMSまたはKVデータベース内のオブジェクトの独立したインデックスを維持します。 S3階層。おそらくDBは、オブジェクトが置かれたり削除されたときに呼び出されるラムダ関数を介して維持されます。
  3. 関連する「フォルダ」内のすべてのオブジェクトを列挙し、2番目に古いオブジェクトのキーを同じフォルダ内の一種のインデックスオブジェクトに戻すオブジェクトPUTでトリガされたラムダ関数を使用します(または既知のインデックスオブジェクト)。次に、インデックスオブジェクト(またはそのメタデータ)の内容を取得することで、2番目に古いものを見つけることができます。

オプション#2は、シンプルで高速で柔軟性があり、アプリが時間の経過と共に変化すると、4番目に古いオブジェクトまたは2番目に新しいオブジェクト)。

+0

あなたの提案をありがとう。私は現在、以前に1または2を実装していなかったために自分自身を蹴っています。 – user3055034

1

あなたは与えられたバケット/パスに二番目のファイルの名前を取得するために、このメソッドを使用することができます。

aws s3api list-objects-v2 --bucket BUCKET-NAME --query 'Contents[1].Key' --output text 

これもBUCKET-NAME/PATHで動作します。

しかし、あなたは多くのサブディレクトリがあると言います。そのため、完全なバケットリストの作成を避けたい場合は、それらのサブディレクトリの名前を知る必要があります。

関連する問題