SteveNewson
11/11/2012 - 12:09 PM

Simple S3 Backup Script

Simple S3 Backup Script

require 'rubygems'
require 'aws/s3'
require 'date'
require 'pathname'

include AWS::S3

if ARGV.length == 0
  abort "You need to specify a file"
end

AWS::S3::Base.establish_connection!(
  :access_key_id  => 'ACCESS_KEY',
  :secret_access_key => 'SECRET_ACCESS_KEY'
)

bucket_file_name = ARGV[0] + "-" + DateTime.now.strftime('%Y-%m-%d-%H-%M-%S')

S3Object.store(Pathname.new(bucket_file_name).basename.to_s, open(ARGV[0]), 'backups')

for_deletion = []
Bucket.objects('backups').each do |file|
  if file.key.match /(.*)-(\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2})/
    file_name = $1
    file_date = DateTime.strptime($2, '%Y-%m-%d-%H-%M-%S')
    if file_name == ARGV[0] && file_date <= DateTime.now.prev_month
      for_deletion << file
    end
  end
end

for_deletion.each do |file_to_delete|
  file_to_delete.delete
end