Skip to content

Instantly share code, notes, and snippets.

@adamwiggins
Created August 5, 2010 07:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adamwiggins/509403 to your computer and use it in GitHub Desktop.
Save adamwiggins/509403 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'aws/s3'
class S3Cmd
include AWS::S3
def initialize
Base.establish_connection!(
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
end
def create(args)
abort(USAGE) unless bucket = args.shift
Bucket.create(bucket)
end
def destroy(args)
abort(USAGE) unless bucket = args.shift
Bucket.delete(bucket)
end
def buckets(args)
puts Service.buckets.map { |b| b.name }.join("\n")
end
def ls(args)
abort(USAGE) unless bucket = args.shift
puts Bucket.objects(bucket).map { |b| b.key }.join("\n")
end
def put(args)
abort(USAGE) unless fname = args.shift
abort(USAGE) unless bucket = args.shift
access = args.shift || 'private'
S3Object.store(File.basename(fname), File.read(fname), bucket, :access => access.to_sym)
puts S3Object.url_for(File.basename(fname), bucket, :authenticated => false)
end
end
USAGE = <<EOTXT
# s3 commands
buckets # list buckets
ls <bucket> # list contents of a bucket
create <bucket> # create a new bucket
destroy <bucket> # destroy bucket
put <file> <bucket> [<access>] # upload a file
EOTXT
abort(USAGE) unless cmd = ARGV.shift
S3Cmd.new.send(cmd, ARGV)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment