【AWS】特定の名前のファイルを一括でダウンロードする

やりたいこと

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

コメントを残す

メールアドレスが公開されることはありません。