Skip to content

Instantly share code, notes, and snippets.

@solisoft
Created February 1, 2010 12:21
Show Gist options
  • Save solisoft/291653 to your computer and use it in GitHub Desktop.
Save solisoft/291653 to your computer and use it in GitHub Desktop.
# FTP authentification -- see OVH FTP Backup guides
server, user, pass = ["your_server", "your_user", "your_pass"]
keep = 15 # keep last 15 days
what_to_save = ["/home/save/*.tar.gz"] # no subdirs
class SaveFtp
require "net/ftp"
require "time"
def initialize(server, user, pass)
@ftp = Net::FTP.new(server, user, pass)
end
def save(what_to_save)
today = Time.now.strftime("%Y%m%d")
@ftp.mkdir(today) rescue nil
@ftp.chdir(today)
what_to_save.each do |wts|
Dir.glob(wts).each do |file|
@ftp.putbinaryfile(file, file.split("/").last)
puts "saving #{file} => #{@ftp.getdir}/#{file.split("/").last}"
end
end
end
def delete_remote_dir(from = "/", keep = 15)
@ftp.chdir from
(@ftp.nlst - [".", ".."]).each do |folder|
begin
@ftp.chdir folder
todelete = @ftp.getdir
if ((Time.now - Time.parse(folder)) / 24 / 60 / 60) > keep
delete_remote_dir from + "/#{folder}"
(@ftp.nlst - [".", ".."]).each do |file|
@ftp.delete "#{todelete}/#{file}"
end
@ftp.chdir from
@ftp.rmdir todelete
else
@ftp.chdir from
end
rescue Exception => e
puts "Error : #{e.inspect}"
end
end
end
def close
@ftp.close
end
end
myftp = SaveFtp.new server, user, pass
myftp.save what_to_save
myftp.delete_remote_dir "/", keep
myftp.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment