s3でログをためていったときにファイルを細かく分けてしまったために、1つのフォルダ内に大量のファイルを保存してしまった,検索することができない,どうしよう。となってしまった。その時のメモ
S3のダッシュボードではファイル名を全て知っている場合直接うちこむことで検索することができる。しかし,途中の文字列で絞り込むなど細かい検索はできない。
s3cmd, brewを使用してこの問題を解決してみた。
目的
s3cmd ls s3://バケット名/フォルダ名/ | grep 検索内容
というコマンドによってshellからs3の特定フォルダ内を検索する。
環境
OS X 10.10.3
Homebrew(http://brew.sh)
アクセスキー,シークレットキーの確認
S3に外部からアクセスするためにはIAMユーザーのアクセスキー,シークレットキーが必要
AWSダッシュボード -> Identity & Access Management -> ユーザー
から自分のユーザー名を選択すると下の方に「認証情報」というタブがある。そのタブを開けばアクセスキー(下図 Access Key ID)とその発行日を見ることができる。ただしシークレットキーはアクセスキーの発行時以外確認することが不可能であるため控えていなかった場合は再度アクセスキーごと生成しなおす必要がある。
s3cmdのインストールと設定
s3cmdとは名前の通りシェルからs3を直接いじれるツールである。今回はこのツールを用いてフォルダ内検索を行う。
brew install s3cmd
s3cmd --configure
configureの際,アクセスキーとシークレットキーを求められるので入力,それ以外は何も入力せずにEnterでOK
configureによって~/.s3cfgという設定ファイルが生成される。
s3cmdを使ってs3の内容を表示する
s3cmd ls
を行うと現在アクセスできるs3のバケット一覧が表示される。
s3cmd ls s3://バケット名/
同様にバケットを指定することでバケット内のディレクトリ一覧を取得できる。
s3cmd ls s3://バケット名/フォルダ名/
によってフォルダ内を表示することができる。
s3cmdを使ってフォルダ内を検索する
shellでフォルダ内を表示できたならあとはgrepを使えば検索できるはず!
s3cmd ls s3://バケット名/フォルダ名/ | grep 検索内容
これでフォルダ内のファイルを検索することが可能になった。