web-dev-qa-db-ja.com

特定の日付のs3バケットからすべてのファイル(またはファイル名)を取得します

昨日からすべてのファイルをs3バケットから取得する必要があります。ファイル名がわかっている場合は、CLIでこれを行う方法を知っています:#aws s3 cp s3:{Path}/{FileName} {diretoryToCopyTo}

しかし、特定の日付のファイルに対してこれをどのように行うのでしょうか?特定の日付のファイル名のリストを取得するだけでも、どの方法からでも、CLIである必要はありません。

キャッチ:バケットには数百万のファイルがあるので、費用効果の高い方法も探しています。

1
Vincent

ファイル名に日付が含まれている場合は、 フィルターの包含と除外aws s3 cp s3:{path}/ {directoryToCopyTo} --exclude "*" --include "*2019-09-09*"を使用できます。

日付がファイルメタデータのみにある場合、現在、サーバー側で日付でフィルタリングする方法はありません。 willstruebings3apiを使用するメソッドがあるgithubの議論があります。

これをs3api関数と--query関数で行う方法は次のとおりです。これはOSXでテストされています。aws s3api list-objects --bucket "bucket-name" --query 'Contents[?LastModified>=2016-05-20][].{Key: Key}'次に、jqまたはgrepを使用してフィルタリングし、他のs3api関数で処理を行うことができます。編集:なぜそれらが表示されないのかわかりませんが、クエリしている日付を囲むためにバッククォートを使用する必要があります

...ただし、フィルタリングはクライアント側で行われるため、これによってapi呼び出しの数が減ることはありません。

1
enharmonic