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 [email protected]%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()
时间: 2024-10-15 20:16:41

python+rsync精确同步指定格式文件的相关文章

使用Python脚本获取指定格式文件列表的方法

在Python环境下获取指定后缀文件列表的方式. 来源stackoverflow 这里简单以*.txt的作为例子. 使用glob(推荐) 1 import glob, os 2 os.chdir("/mydir") 3 for file in glob.glob("*.txt"): 4 print(file) 简单实用os.listdir 1 import os 2 for file in os.listdir("/mydir"): 3 if f

rsync 精确同步文件用法 (转载)

-- include-from 指定目录下的部分目录的方法: include.txt: aa bb ss Command: rsync -aSz  --include-from=/home/include.txt --exclude=/* /home/mnt/data/upload/f/ [email protected]:/mnt/data/upload/f/ --exclude-from 排除目录下的部分目录的方法: exclude.txt: cc dd Command: rsync  -a

rsync服务同步、日志文件、screen工具

10.32 rsync通过服务同步(上) 在使用该方法进行同步之前需要先在服务的开启相应服务同时要监听一个端口(可自定义),默认是监听873端口,开启服务之前编辑rsync配置文件"/etc/rsyncd.conf"(将服务添加进去)然后直接使用命令:"rsync --daemon(服务名称)"进行同步.或者将配置文件写到一个自定义文件中,使用命令"rsync --configfile"进行同步.配置完成后客户端可以通过指定端口与服务端进行通信.

Rsync 自动同步压缩日志文件至备份服务器

业务场景:将所有服务器内的日志文件以小时为单位压缩后保存同时清空源日志文件.此后通过rsync + inotify 机制将压缩文件统一备份到日志服务器内.实现对日志文件的统一保存和备份.rsync 和inotify这里就不介绍了!有兴趣的可以到官网查看.大致服务架构图: 一.三台机器的IP分别为:br/>源服务器:172.20.2.108目标(备份)服务器:172.20.2.225@todo:从源服务器(172.20.2.108)的/data/目录下的所有的文件实时通过到目标服务器(172.20

Windows删除文件夹下的指定格式文件(递归删除)

问题描述: 今天遇到一个需求,需要对文件夹进行文件筛选.目录结构较为复杂(目录较多,层次较深),数据量较大(总共60GB左右). 鉴于上述情况,直接排除了人工处理方式(否则小伙伴们会打死我的). 解决方法: 网上看了一下,初步确定通过windows命令的方式处理 . 命令如下: del /s PATH\*.扩展名 例如: del /s D:\AAA\*.zip   表示删除D盘下AAA文件夹以及其子文件夹中所有的ZIP格式文件. 命令可以在cmd中直接执行或者卸载bat脚本中执行. 提示:在执行

matlab如何读取某指定文件夹下的指定格式文件

%% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positive Images\';%要读取文件的路径 dtPositive=dir([positiveFolder fext]);%将要读取文件的路径加格式组合 namePositiveCell={dtPositive.name};%读取指定文件夹下的所有符合格式要求的文件名元胞 %% 构造元胞,用来存储指定

记一次rsync增量同步远程服务器文件

rsync remote shell 增量方式同步数据 rsync同步文件有两种方式,一种是daemon的方式(rsync daemon)另一种方式是通过远程shell方式(rsync remote shell). 两种方式的区别 daemon方式,这种方式通过TCP方式连接远程rsync daemon,需要使用配置文件,并启用daemon进程. rsync [OPTION] user@host::src dest rsync [OPTION] src user@host::dest remot

windows下指定格式文件转移

#放在目录下执行 1.bat 作用:将该目录下所有mp4格式的文件转移至该目录下的target目录下 须保证target目录不存在@echo off md targetfor /f "delims=" %%a in ('dir /a-d/b/s *.mp4') do move %%~fsa targetecho end... pause

读取坐标文件(指定格式文件)

在数据处理过程,比如GPS或者全站仪,从这些仪器中得到都是规定格式的坐标文件,在进行数据处理过程中,我们经常需要把这些坐标取出来进行处理,比如 坐标名,x,y01,23.4,33.202,23.4,33.203,23.4,33.204,23.4,33.205,23.4,33.206,23.4,33.207,23.4,33.2 C++或者C都可以使用scanf函数来读取,或者C++可以对getline第二个参数传值读取,但是对于C#,只有readline函数,每次只能读取一行,所以我们考虑使用sp