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 で必要なだけ対象に戻している