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 相关文章推荐
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
django做form表单的数据验证过程详解
Jul 26 Python
利用python实现周期财务统计可视化
Aug 25 Python
pycharm修改file type方式
Nov 19 Python
python爬虫实现获取下一页代码
Mar 13 Python
Python的历史与优缺点整理
May 26 Python
MATLAB数学建模之画图汇总
Jul 16 Python
python调用私有属性的方法总结
Jul 24 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 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的输入输出流
2007/02/14 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
python读取word文档的方法
2015/05/09 Python
Django中url的反向查询的方法
2018/03/14 Python
django解决跨域请求的问题
2018/11/11 Python
python numpy元素的区间查找方法
2018/11/14 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python 获取等间隔的数组实例
2019/07/04 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
pygame实现打字游戏
2021/02/19 Python
Python帮你识破双11的套路
2019/11/11 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
吸烟检讨书2000字
2014/02/13 职场文书
会计助理岗位职责
2014/02/17 职场文书
师恩难忘教学反思
2014/04/27 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers