LoginSignup
7
8

More than 5 years have passed since last update.

Amazon s3でfindコマンドっぽいことをするスクリプト

Last updated at Posted at 2014-01-01

s3 で作業をしていて,ファイルをどの位置に置いたのか忘れることがあるかと思います.
Unix系OSのローカルファイルシステム上では,find コマンドを使うことが多いと思うのですが,s3 のバケットの中では,s3fs でマウントするなどしないと find コマンドは使えません.
AWS SDK を使って,簡単なスクリプトを書いて解決できます.

require 'inifile'
require 'aws-sdk'

ini = IniFile.load(ENV['HOME'] + "/.aws/config")
section = 'default'

uri = URI.parse(ARGV[0])
raise 'Scheme must be "s3"' if uri.scheme != 's3'

siteName = ARGV[1]
#==============================================================
s3 = AWS::S3.new(
  :access_key_id => ini[section]['aws_access_key_id'],
  :secret_access_key => ini[section]['aws_secret_access_key'],
  :region => ini[section]['region']
)

bucket = s3.buckets[uri.host]
prefix = uri.path[1..-1]


bucket.objects.with_prefix(prefix).each do |object|
  puts object.key if object.key =~ /\/#{ARGV[1]}$/
end

上記の例では,認証関係の情報は,aws-cli と同じini形式であることを期待しています.
ARGV[0] には URI 形式でバケットとプレフィックスを指定します.scheme は s3 であることを期待しています.
この辺りは,aws-cli と同じですので,戸惑うことはないと思います.

ARGV[1] には,探したいファイル名を指定します.残念ながら,正規表現は使えません.
しかし,s3 上のパス名(キー名)に末尾一致するものを探し出しますので,例えば拡張子で軽く絞り込んでみる,といったようなことはできます.

上記ソースコードは,ライセンスを設定するほどのものではありませんが,一応MITライセンスとしました.
最新版ソースコードは,Bitbucketで保守 しています.

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8