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で保守 しています.