高木のブログ

AWS CLI で S3 からワイルドカードで指定してファイルをダウンロードしたい

2022/10/24

S3 に yyyy-mm-dd.csv という名前の形式で CSV ファイルが保存されている

$ aws s3 ls s3://path/to/
2017-01-20 18:03:55      47968 2014-10-16.csv
2017-01-20 18:02:47      71855 2014-10-17.csv
2017-01-20 18:02:45      73806 2014-10-18.csv
...
2022-10-24 03:21:43    7162892 2022-10-21.csv
2022-10-24 03:21:40    6656291 2022-10-22.csv
2022-10-24 03:21:39    5379009 2022-10-23.csv

不具合の調査で4月分の CSV ファイルをダウンロードしたかった

$ aws s3 ls s3://path/to/2022-04
2022-04-04 03:19:20    8364026 2022-04-01.csv
2022-04-05 03:20:20    8394353 2022-04-02.csv
2022-04-06 03:18:53    8243473 2022-04-03.csv
...
2022-05-01 03:18:09    8029591 2022-04-28.csv
2022-05-02 03:18:00    7992829 2022-04-29.csv
2022-05-03 03:18:49    7502806 2022-04-30.csv

ls コマンドで絞り込みできるなら cp コマンドでもできるだろうと思ったらできなかった

$ aws s3 cp s3://path/to/2022-04 .
fatal error: An error occurred (404) when calling the HeadObject operation: Key "path/to/2022-04" does not exist

—recursive オプションと —exclude オプション と —include オプションを使うと絞り込みができた

$ aws s3 cp s3://path/to/ . --recursive --exclude "*" --include "2022-04-*.csv
  • —recursive: ディレクトリ配下を再帰的にコピーする
  • —exclude: 指定した文字列を除外する
  • —include: —include で除外したものの中から指定した文字列を対象に戻す

—exclude で全ファイルを除外したあと、—include で必要なだけ対象に戻している

参考

[小ネタ] S3に保存されているログファイルをAWS CLIでまとめてコピーする | DevelopersIO


ytkg

Written by ytkg, Twitter, GitHub