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 list语法学习(带例子)
Nov 01 Python
python实现获取序列中最小的几个元素
Sep 25 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
scrapy爬虫完整实例
Jan 25 Python
python数字图像处理之高级形态学处理
Apr 27 Python
python实现抖音视频批量下载
Jun 20 Python
浅析Django中关于session的使用
Dec 30 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
python 多线程死锁问题的解决方案
Aug 25 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
Python实现的简单hangman游戏实例
2015/06/28 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
Django实现跨域请求过程详解
2019/07/25 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
采购部主管岗位职责
2014/01/01 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
2014年六五普法工作总结
2014/11/25 职场文书