自动查找相关文件.上传到服务器

#!/usr/bin/ruby#coding:utf-8require'date'$result=[]bak_ser="bacula@192.168.100.24"tar_dir="/tmp/auto_tar_bak"defcheck(top_dir,ext_type,exclude,dir_deep)content=`ls-1#{top_dir}`.splitforiincontenti=top_dir+"/"+iifFile.directory?(i)nextifFile.ftype(i)=='link'beginnextifi.scan('/').length>=dir_deeprescuenextifi.force_encoding('GBK').scan('/').length>=dir_deependnextifi.match(/#{exclude}/)unlessDir.entries(i).include?('.svn')begincheck(i,ext_type,exclude,dir_deep)rescueendendelsifFile.ftype(i)=='file'begin#maybenoextnameunlessi.scan(/\.[^\.]+$/)[0].match(/#{ext_type}/i)ifFile.size(i)<=1024000&&File.size(i)>=120if`file\"#{i}\"`.include?('ASCII')||i.scan(/\.[^\.]+$/)[0].match(/doc|docx|xlsx|xls/i)$result<<"."+iendendendrescue#unlessi.force_encoding('GBK').scan(/\.[^\.]+$/)[0].match(/bmp|png|pdf|vsd|rar|log|dat|bak/i)ifFile.size(i)<=1024000&&File.size(i)>=120if`file\"#{i}\"`.include?('ASCII')#||i.force_encoding('GBK').scan(/\.[^\.]+$/)[0].match(/doc|docx|xlsx|xls/i)$result<<"."+iendend#endendendendenddefwrite_file(path,str)aFile=File.new(path,"w")aFile.putsstraFile.closeenddefdelete_dir_line(dir)dir[0]=='/'?dir[1..-1]:direnddefimport_config(home_name)path_in,path_ex,filetype=[],[],[]config={:deep=>8,:exclude=>path_ex,:filetype=>filetype,:include=>path_in}beginFile.open("/local_home/#{home_name}/config.txt",'r').eachdo|line|ifline.match(/^deep/)config[:deep]=line.split('=')[-1].to_iifline.split('=')[-1].to_i+2>=1elsifline.match(/^exclude/)line.split('=')[-1].split(';').each{|x|path_ex<<"/local_home/#{home_name}/"+delete_dir_line(x.chomp)ifx.length>1}elsifline.match(/^include/)line.split('=')[-1].split(';').each{|x|path_in<<"/local_home/#{home_name}/"+delete_dir_line(x.chomp)ifx.length>1}elsifline.match(/^filetype/)line.split('=')[-1].split(';').each{|x|filetype<<x.chompifx.length>1}endendrescueconfig={:deep=>8,:exclude=>path_ex,:filetype=>filetype,:include=>path_in}endpath_ex.each{|x|path_ex.delete(x)ifpath_in.index(x)}returnconfigend#gethomeuserhome_user=`grep$(hostname)/etc/auto.nfs|awk-F\'/local_home/\'\'{print$2}\'`.split.join('|')`rm-rf#{tar_dir}`ifFile.directory?(tar_dir)`ls-1/local_home`.split.eachdo|list|iflist.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)ifconfig[:filetype].length>0filetype=config[:filetype].join('|')elsefiletype="bmp|png|pdf|vsd|rar|log|dat|bak"endifconfig[:exclude].length>0exclude=config[:exclude].join('|')elseexclude="Code|RTL|INCA.libs"endiflist.match(/#{home_user}/)ifconfig[:include].length>0config[:include].eachdo|in_path|check(in_path,filetype,exclude,config[:deep])ifFile.directory?(in_path)endelsecheck("/local_home/"+list,filetype,exclude,config[:deep])endend$result<<"."+tar_list_path#writetar_listtotmpfilewrite_file(tar_list_path,$result)#tarfile`cd/&&tar-jc-T#{tar_list_path}-f#{tar_file_name}`#scpfile`scp#{tar_file_name}#{bak_ser+":/bak/auto_bak/"+list+"/"+File.basename(tar_file_name)}`$result=[]end`rm-rf#{tar_dir}`ifFile.directory?(tar_dir)end


运行前会加载配置文件 (/local_home/USERNAME/config.txt)

格式如下

include=DIR1;DIR2

exclude=DIR1;DIR2

deep=6

filetype=dat;avi