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进阶教程之循环对象
Aug 30 Python
Python性能优化的20条建议
Oct 25 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
python语言中with as的用法使用详解
Feb 23 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
python如何快速拼接字符串
Oct 28 Python
pycharm实现猜数游戏
Dec 07 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 Python
详解Python为什么不用设计模式
Jun 24 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
php查询ip所在地的方法
2014/12/05 PHP
javascript一点特殊用法
2008/05/28 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
JS中的phototype详解
2017/02/04 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
python中星号变量的几种特殊用法
2016/09/07 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
.NET面试10题
2014/02/24 面试题
初任培训自我鉴定
2013/10/07 职场文书
客户接待方案
2014/02/26 职场文书
读群众路线心得体会
2014/03/07 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
安全生产年活动总结
2014/08/29 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
食品卫生管理制度
2015/08/06 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
golang的文件创建及读写操作
2022/04/14 Golang