目次

目次

S3から特定のファイルを再帰的にコピーする方法

アバター画像
山本 耕琢(コウタク)
アバター画像
山本 耕琢(コウタク)
最終更新日2017/04/17 投稿日2017/04/17

1.概要

現在のシステムでは以下のように保存されている。

■格納例 [S3バケット]/[サーバホスト名] / [インスタンスID] / YYYY / MM / DD /[ログ種別] /ログファイル  ※ログファイルは、5分ごとに1ファイルが作成される。

■パス例

s3://test-recochoku-jp/
 api-ap/
 api-ap00-i-0ed0250b86b11d3a6/
 2017/02/17/
 service_reco_dev.log/
 service_reco_dev.log_2017-02-17-15_12.gz

上記のようなS3のディレクトリ構成のため、特定の日のログを探すのがかなり困難となります。 なので、サーバに一括でログファイルをダウンロードするコマンドを調査しましたので、共有します。

2.実行コマンド

aws s3 cp s3://test-recochoku-jp/api-ap/ . --recursive --exclude "*" --include "api-ap00*/2017/02/1*/service_reco_dev*.gz"

3.解説

各コマンドとオプションの解説は以下の通りです。

コマンド/オプション 解説
aws s3 CLIでS3サービスに関する手続き実行するコマンド
cp ファイルを、ローカル→S3、S3→ローカル、S3→S3でコピー
s3://test-recochoku-jp S3バケット名+ディレクトリ(S3Url)
. ローカルディレクトリ
–recursive 指定されたディレクトリ配下を再帰的に検索
–exclude 指定された文字列が存在するファイルを除外(パスも含む)
–include 指定された文字列が存在するファイルを含める。※–excludeで除かれたものが対象となる。
–dryrun ※おまけ 指定した場合、ファイルコピーは実施せず、実行結果のみを表示

また、「–exclude」と「–include 」で使用が出来る正規表現は、以下の通りです。

*: Matches everything
?: Matches any single character
[sequence]: Matches any character in sequence
[!sequence]: Matches any character not in sequence

なので、「–recursive」オプションで再帰的にディレクトリを検索して 「–exclude」に”*”を指定して、いったんすべてを除外します。 除外したあと、「–include」に必要なファイルを正規表現を指定して取得します。 あとは、grepコマンドなどで調査を実施することが出来ます。

4.参考URL

AWS CLI Command Reference

アバター画像

山本 耕琢(コウタク)

レコチョクの楽曲情報の検索や、決済/会員情報、 レコメンド情報などを扱う、レコチョクAPIの運用と改善を担当しています。主にプロジェクト管理をやっています。技術力は低めですが、気づきがあったことなどを更新していきます。

目次