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 相关文章推荐
浅谈编码,解码,乱码的问题
Dec 30 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
通过Pandas读取大文件的实例
Jun 07 Python
实例讲解python中的序列化知识点
Oct 08 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
在django中,关于session的通用设置方法
Aug 06 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
keras slice layer 层实现方式
Jun 11 Python
python rsa-oaep加密的示例代码
Sep 23 Python
Python Numpy库的超详细教程
Apr 06 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP7新特性
2021/03/09 PHP
Js sort排序使用方法
2011/10/17 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
详解python进行mp3格式判断
2016/12/23 Python
python字典快速保存于读取的方法
2018/03/23 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
解决Python中回文数和质数的问题
2019/11/24 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
公益广告语集锦
2014/03/13 职场文书
党支部活动策划方案
2014/08/18 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
交流会主持词
2015/07/02 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android