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 写的一个爬虫程序源码
Feb 28 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python实现猜拳游戏
Mar 04 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 16 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去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
php加密解密实用类分享
2014/01/07 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP文件操作详解
2016/12/30 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python中的自省(反射)详解
2015/06/02 Python
python简单读取大文件的方法
2016/07/01 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
党员读书活动心得体会
2016/01/14 职场文书
八年级物理教学反思
2016/02/19 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android