😓
AWS S3 から ZIP ファイルをまとめてダウンロードし解凍する on Mac
S3 に保存されたファイル
AWS コンソールから S3 バケットにあるファイルの確認はでき、ファイルごとのダウンロードはできますが、複数指定してのダウンロードができません。理由はわかりませんが、非常に不便です。
調べると CLI で簡単にできることが分かったので、備忘録として書いておきます。
前提条件
環境は以下になります。
- macOS Monterey バージョン 12.3.1
- AWS CLI が使えるように設定し、S3 にもアクセスできる
OS のバージョンにはほぼ依存しないと思いますが、念の為記載しておきます。
CLI
コマンドラインから次を実行します。
$ aws s3 cp <source> <target> --recursive
"aws s3 cp" がコマンド部分、コピー元とコピー先を "source", "target" として指定し、コマンドオプションの "--recursive" を指定します。このオプションを指定することで "source" にファイルが複数ある場合は繰り返しコマンドを実行してくれます。
実行例は次になります。
$ aws s3 cp s3://hogehoge_japan/backup/20220805/ /tmp --recursive
"s3://hogehoge_japan/backup/20220805/" をコピー元、"/tmp" をコピー先として指定しています。コピー元で正規表現が使えますので、特定のファイルのみダウンロードすることも可能です。
ファイルの解凍
自分の場合、ZIP 圧縮したファイルだったので、いっきに解凍してファイル名に紐づくフォルダに展開したかったので、次のようにコマンドを実行しました。
$ for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done
ファイル名からサフィックスの .ZIP を除いた部分をフォルダ名としてフォルダを作成し、フォルダ内に展開しています。
ただし、ターミナルで実行されているシェルによっては、この書き方ではだめかもしれません。今回は zsh でした。多分 bash でも大丈夫だと思います。
シェルコマンドの書き方を結構忘れていました、、、orz
Discussion