やりたいこと
S3上に特定の名前のファイルがあり、なるべく簡単にダウンロードしたい。
環境
OS:Red Hat Enterprise Linux 4
aws-cli:1.6.3
コマンド
aws s3 cp s3://{バケット名とディレクトリ}/ ./{ローカルのディレクトリパス} --recursive --exclude "*" --include "*201[89]*" --dryrun
特定のバケット配下にある全ディレクトリの全ファイルのうち、2018と2019を名前に含むファイルだけを一括でダウンロードする。(dryrunでまずは挙動確認)
cp
cpコマンドにリモートとローカルのパスを指定することで、ファイルの転送ができる。
1つ目の引数がコピー元で、次がコピー先となる。
–recursive
指定したディレクトリ配下全てがコピーの対象になる。
コピーするファイルを絞り込む場合、次のオプションを使用する。
–exclude
コピー対象から除外するファイルを指定する。
書き方は以下の通りで、正規表現に似ている。
- *:全ての文字を何文字数でも許容する
- ?:全文字を1文字だけ許容する
- [sequence]:指定したいずれかの文字を許容する
- [!sequence]:指定した文字を全て許容しない
特定のファイルを除外するだけなら、excludeでファイルを指定するだけでOK。
もし特定のファイルを指定する場合、excludeを * にして全てを除外し、それから次のincludeで条件を指定するのが基本となる。
–include
特定の名前を持つファイルを処理の対象にできるオプション。
例えば、 “*201[89]*”と書くことで、2018または2019を名前に含むファイルのみコピーすることができる。
“*201[!89]*” と書けば、2018と2019のファイルをコピーから除外できる。
–dryrun
実際にはファイルを転送しないが、ファイルを転送したかのような結果を表示するオプション。
実際にファイルを転送すると時間が(場合によってはお金も)かかるので、ファイルの絞り込み確認に必須。
対象ファイルに問題が無ければ、dryrunを外したコマンドを実行する。
https://docs.aws.amazon.com/cli/latest/reference/s3/index.html#use-of-exclude-and-include-filters