自动备份脚本-创新互联
自动查找相关文件.上传到服务器
创新互联公司服务项目包括大通网站建设、大通网站制作、大通网页制作以及大通网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,大通网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到大通省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!#!/usr/bin/ruby # coding: utf-8 require 'date' $result = [] bak_ser = "bacula@192.168.100.24" tar_dir = "/tmp/auto_tar_bak" def check(top_dir, ext_type, exclude, dir_deep) content = `ls -1 #{top_dir}`.split for i in content i = top_dir + "/" + i if File.directory?(i) next if File.ftype(i) == 'link' begin next if i.scan('/').length >= dir_deep rescue next if i.force_encoding('GBK').scan('/').length >= dir_deep end next if i.match(/#{exclude}/) unless Dir.entries(i).include?('.svn') begin check(i, ext_type, exclude, dir_deep) rescue end end elsif File.ftype(i) == 'file' begin # maybe no ext name unless i.scan(/\.[^\.]+$/)[0].match(/#{ext_type}/i) if File.size(i) <= 1024000 && File.size(i) >= 120 if `file \"#{i}\"`.include?('ASCII') || i.scan(/\.[^\.]+$/)[0].match(/doc|docx|xlsx|xls/i) $result << "." + i end end end rescue #unless i.force_encoding('GBK').scan(/\.[^\.]+$/)[0].match(/bmp|png|pdf|vsd|rar|log|dat|bak/i) if File.size(i) <= 1024000 && File.size(i) >= 120 if `file \"#{i}\"`.include?('ASCII') #|| i.force_encoding('GBK').scan(/\.[^\.]+$/)[0].match(/doc|docx|xlsx|xls/i) $result << "." + i end end #end end end end end def write_file(path,str) aFile = File.new(path,"w") aFile.puts str aFile.close end def delete_dir_line(dir) dir[0] == '/' ? dir[1..-1] : dir end def import_config(home_name) path_in, path_ex, filetype = [], [], [] config = {:deep => 8, :exclude => path_ex, :filetype => filetype, :include => path_in} begin File.open("/local_home/#{home_name}/config.txt",'r').each do |line| if line.match(/^deep/) config[:deep] = line.split('=')[-1].to_i if line.split('=')[-1].to_i + 2 >= 1 elsif line.match(/^exclude/) line.split('=')[-1].split(';').each {|x| path_ex << "/local_home/#{home_name}/" + delete_dir_line(x.chomp) if x.length > 1} elsif line.match(/^include/) line.split('=')[-1].split(';').each {|x| path_in << "/local_home/#{home_name}/" + delete_dir_line(x.chomp) if x.length > 1} elsif line.match(/^filetype/) line.split('=')[-1].split(';').each {|x| filetype << x.chomp if x.length > 1} end end rescue config = {:deep => 8, :exclude => path_ex, :filetype => filetype, :include => path_in} end path_ex.each { |x| path_ex.delete(x) if path_in.index(x) } return config end # get home user home_user = `grep $(hostname) /etc/auto.nfs | awk -F \'/local_home/\' \'{print $2}\'`.split.join('|') `rm -rf #{tar_dir}` if File.directory?(tar_dir) `ls -1 /local_home`.split.each do |list| if list.match(/#{home_user}/) `mkdir -p #{tar_dir + "/" + list}` tar_list_path = "#{tar_dir + "/" + list}/tar.list" tar_file_name = "#{tar_dir + "/" + list}/#{DateTime.now.strftime("%Y-%m-%d")}.tar.bz2" config = import_config(list) if config[:filetype].length > 0 filetype = config[:filetype].join('|') else filetype = "bmp|png|pdf|vsd|rar|log|dat|bak" end if config[:exclude].length > 0 exclude = config[:exclude].join('|') else exclude = "Code|RTL|INCA.libs" end if list.match(/#{home_user}/) if config[:include].length > 0 config[:include].each do |in_path| check(in_path, filetype, exclude, config[:deep]) if File.directory?(in_path) end else check("/local_home/" + list, filetype, exclude, config[:deep]) end end $result << "." + tar_list_path # write tar_list to tmp file write_file(tar_list_path,$result) # tar file `cd / && tar -jc -T #{tar_list_path} -f #{tar_file_name}` # scp file `scp #{tar_file_name} #{bak_ser + ":/bak/auto_bak/" + list + "/" + File.basename(tar_file_name)}` $result = [] end `rm -rf #{tar_dir}` if File.directory?(tar_dir) end
运行前会加载配置文件 (/local_home/USERNAME/config.txt)
格式如下
include=DIR1;DIR2
exclude=DIR1;DIR2
deep=6
filetype=dat;avi
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
网页标题:自动备份脚本-创新互联
转载来于:http://scyanting.com/article/dcejji.html