python+rsync精确同步指定格式文件
本文实例为大家分享了python+rsync精确同步指定格式文件的具体代码,供大家参考,具体内容如下
#coding:utf-8 #!/usr/bin/envpython ''' updatedb更新本地服务器指定目录/home/upload/delocate.dbz数据库 然后locate命令正则查找符合条件的文件并将文件名输出到locate.src 通过paramiko模块得到远程服务器符合条件的文件并将文件名输出到locate.dst 比较这两个文件得到locate.diff,最好rsync命令同步locate.diff列表中的文件 到远程服务器 ''' importparamiko importcommands importos importlogging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s%(message)s', datefmt='%Y-%m-%d%H:%M:%S', filename='/var/log/upload_to_chengdu.log', filemode='a') logging.info("###################################################################") hostname='8.8.8.8' username='username' password='password' port=22 locate_lists=['/tmp/locate.src','/tmp/locate.dst','/tmp/locate.diff'] dict_path={'locate_lists':locate_lists,'dst_db':'/tmp/locate.db', 'src_db':'/tmp/locate.db','dst_path':'/logs/rsync_log/', 'src_path':'/home/upload/','passwd_file':'/etc/rsync.pas'} defcheck_file(): forlindict_path['locate_lists']: ifos.path.exists(l): commands.getstatusoutput('sudorm%s'%l) defget_dst_list(): s=paramiko.SSHClient() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(hostname=hostname,port=port,username=username,password=password) cmd_create="sudoupdatedb-U%s-o%s&&sudolocate-d%s--regex'.*[0-9]{4}([-]{0,1}[0-9]{2}){2}\..*gz$'>>%s"%( dict_path['dst_path'],dict_path['dst_db'],dict_path['dst_db'],dict_path['locate_lists'][1]) cmd_delete='sudorm'+dict_path['locate_lists'][1] stdin,stdout,stderr=s.exec_command(cmd_create) #printstdout.read() try: t=paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp=paramiko.SFTPClient.from_transport(t) sftp.get(dict_path['locate_lists'][1],dict_path['locate_lists'][1]) t.close() exceptException,e: printe stdin,stdout,stderr=s.exec_command(cmd_delete) s.close() defget_src_list(): cmd="sudoupdatedb-U%s-o%s&&sudolocate-d%s--regex'.*[0-9]{4}([-]{0,1}[0-9]{2}){2}\..*gz$'>>%s"%( dict_path['src_path'],dict_path['src_db'],dict_path['src_db'],dict_path['locate_lists'][0]) commands.getstatusoutput(cmd) defcmp_diff(): f1=open(dict_path['locate_lists'][0],'r') f2=open(dict_path['locate_lists'][1],'r') f3=open(dict_path['locate_lists'][2],'a') x=f1.readlines() y=f2.readlines() f1.close() f2.close() foriinx: j=dict_path['dst_path']+i[13:] ifjnotiny: f3.writelines(i) f3.close() defrsync_file(): f=open(dict_path['locate_lists'][2],'r') foriinf.readlines(): cmd='cd%s&&sudorsync-Rvz%supload@%s::aliyun_log--password-file=%s'%( dict_path['src_path'],i.strip('\n')[13:],hostname,dict_path['passwd_file']) logging.info(cmd) commands.getstatusoutput(cmd) f.close() defdel_locate_file(): cmd='sudorm{%s,%s,%s}'%(dict_path['locate_lists'][1],dict_path['locate_lists'][0],dict_path['locate_lists'][2]) commands.getstatusoutput(cmd) if__name__=='__main__': check_file() get_dst_list() get_src_list() cmp_diff() rsync_file() del_locate_file()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。