%20%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
昨日のすべてのファイルを s3 バケットから取得する必要があります。ファイル名がわかれば、CLI でこれを行う方法がわかります。
#aws s3 cp s3:{Path}/{FileName} {diretoryToCopyTo}
しかし、特定の日付のファイルに対してこれをどのように行うのでしょうか? 特定の日付のファイル名のリストを取得するだけでも、どのような方法でも実行でき、CLI である必要はありません。
キャッチ:バケットには数百万のファイルがあるので、コスト効率の良い方法も探しています。
答え1
ファイル名に日付が含まれている場合は、含めるフィルタと除外フィルタ:
aws s3 cp s3:{path}/ {directoryToCopyTo} --exclude "*" --include "*2019-09-09*"
日付がファイルのメタデータにのみ含まれている場合、現時点ではサーバー側で日付によるフィルタリングを行う方法はありません。githubのディスカッションで、ウィルストービングを使用するメソッドがありますs3api
:
s3api
と関数を使ってこれを行う方法は次のとおりです--query
。これは OSX でテストされています。aws s3api list-objects --bucket "bucket-name" --query 'Contents[?LastModified>=2016-05-20][].{Key: Key}'
次に、jq または grep を使用してフィルタリングし、他の s3api 関数で処理を行うことができます。編集: 表示されない理由はわかりませんが、クエリする日付をバックティックで囲む必要があります。
...ただし、フィルタリングはクライアント側で行われるため、API 呼び出しの数は減りません。