python+rsync精确同步指定格式文件


Posted in Python onAugust 29, 2019

本文实例为大家分享了python+rsync精确同步指定格式文件的具体代码,供大家参考,具体内容如下

# coding: utf-8
#!/usr/bin/env python
'''
updatedb更新本地服务器指定目录/home/upload/de locate.dbz数据库
然后locate命令正则查找符合条件的文件并将文件名输出到locate.src
通过paramiko模块得到远程服务器符合条件的文件并将文件名输出到locate.dst
比较这两个文件得到locate.diff,最好rsync命令同步locate.diff列表中的文件
到远程服务器
'''
import paramiko
import commands
import os
import logging
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'}
def check_file():
  for l in dict_path['locate_lists']:
    if os.path.exists(l):
      commands.getstatusoutput('sudo rm %s' % l)
def get_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 = "sudo updatedb -U %s -o %s && sudo locate -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 = 'sudo rm ' + dict_path['locate_lists'][1]
  stdin, stdout, stderr = s.exec_command(cmd_create)
  # print stdout.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()
  except Exception, e:
    print e
  stdin, stdout, stderr = s.exec_command(cmd_delete)
  s.close()
def get_src_list():
  cmd = "sudo updatedb -U %s -o %s && sudo locate -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)
def cmp_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()
  for i in x:
    j = dict_path['dst_path'] + i[13:]
    if j not in y:
      f3.writelines(i)
  f3.close()
def rsync_file():
  f = open(dict_path['locate_lists'][2], 'r')
  for i in f.readlines():
    cmd = 'cd %s && sudo rsync -Rvz %s upload@%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()
def del_locate_file():
  cmd = 'sudo rm {%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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的循环体中使用else语句的方法
Mar 30 Python
Python爬豆瓣电影实例
Feb 23 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
基于python的Paxos算法实现
Jul 03 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
python字典与json转换的方法总结
Dec 28 Python
django-rest-swagger对API接口注释的方法
Aug 29 #Python
Python3视频转字符动画的实例代码
Aug 29 #Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 #Python
python中property属性的介绍及其应用详解
Aug 29 #Python
django-rest-swagger的优化使用方法
Aug 29 #Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 #Python
python实现最大优先队列
Aug 29 #Python
You might like
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
php中namespace use用法实例分析
2016/01/22 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python实现基本线性数据结构
2016/08/22 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
销售人员个人求职信
2013/09/26 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
安全标准化汇报材料
2014/02/03 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
离婚协议书范文2015
2015/01/26 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
同学聚会通知短信
2015/04/20 职场文书
人与自然的观后感
2015/06/18 职场文书
婚宴父母致辞
2015/07/27 职场文书
小学新课改心得体会
2016/01/22 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
Pytorch 实现变量类型转换
2021/05/17 Python
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
JS实现简单的九宫格抽奖
2022/06/28 Javascript