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正则用法实例讲解
Jun 21 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
Tensorflow 多线程设置方式
Feb 06 Python
python实现斗地主分牌洗牌
Jun 22 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
php db类库进行数据库操作
2009/03/19 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
python 提取文件的小程序
2009/07/29 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
django定期执行任务(实例讲解)
2017/11/03 Python
django初始化数据库的实例
2018/05/27 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
python匿名函数的使用方法解析
2019/10/10 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
学校端午节活动方案
2014/08/23 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
学校开除通知书
2015/04/25 职场文书
学校捐款活动总结
2015/05/09 职场文书
2015年预算员工作总结
2015/05/14 职场文书
毕业实习单位意见
2015/06/04 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers