#!/usr/bin/env ruby require "fileutils" repos = "/home/svn/repos" trac = "/home/trac" backup = "/home/ussy/backup" def remove_last_separator(path) path.gsub(/\/+\z/, "") end def backup(repos, trac, backup) date = Time.now.strftime("%Y%m%d") repos_backup = "#{backup}/#{date}/svn" trac_backup = "#{backup}/#{date}/trac" FileUtils.mkdir_p(backup) unless File.exists?(backup) FileUtils.mkdir_p(repos_backup) unless File.exists?(repos_backup) FileUtils.mkdir_p(trac_backup) unless File.exists?(trac_backup) Dir.foreach(repos) do |dir| next if /\A\./ =~ dir svnadmin = "svnadmin hotcopy #{repos}/#{dir} #{repos_backup}/#{dir}" puts svnadmin `#{svnadmin}` next unless File.exists?("#{trac}/#{dir}") tracadmin = "trac-admin #{trac}/#{dir} hotcopy #{trac_backup}/#{dir}" puts tracadmin `#{tracadmin}` end end backup( remove_last_separator(repos), remove_last_separator(trac), remove_last_separator(backup))