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 相关文章推荐
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python使用chardet判断字符编码
May 09 Python
python黑魔法之编码转换
Jan 25 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
python实现自动登录后台管理系统
Oct 18 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python中with上下文管理协议的作用及用法
Mar 18 Python
使用Python获取字典键对应值的方法
Apr 26 Python
Python自动化实战之接口请求的实现
May 30 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 XML数据解析代码
2010/05/26 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
用js重建星际争霸
2006/12/22 Javascript
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
JS解析XML实例分析
2015/01/30 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
Vue渲染函数详解
2017/09/15 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
原生JS实现留言板
2020/03/26 Javascript
Python实现类继承实例
2014/07/04 Python
Django Highcharts制作图表
2016/08/27 Python
Python环境变量设置方法
2016/08/28 Python
django云端留言板实例详解
2019/07/22 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
大学生自我鉴定
2013/12/08 职场文书
职业女性的职业规划
2014/03/04 职场文书
法律进社区活动总结
2015/05/07 职场文书
教师反邪教心得体会
2016/01/15 职场文书
2019财务转正述职报告
2019/06/27 职场文书
导游词之凤凰古城
2019/10/22 职场文书
浅谈python数据类型及其操作
2021/05/25 Python