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查询Mysql时返回字典结构的代码
Jun 18 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
python开发之for循环操作实例详解
Nov 12 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
python dir函数快速掌握用法技巧
Dec 09 Python
python 爬取吉首大学网站成绩单
Jun 02 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
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
微信小程序实现锚点功能
2019/11/20 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
python批量提取word内信息
2015/08/09 Python
Python Requests安装与简单运用
2016/04/07 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
Django数据库操作之save与update的使用
2020/04/01 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
中专生职业生涯规划书范文
2013/12/29 职场文书
承认错误的检讨书
2014/01/30 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
中学生运动会广播稿
2015/08/19 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
公开致歉信
2019/06/24 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
python unittest单元测试的步骤分析
2021/08/02 Python