需求:

    win主机上一个目录为备份目录,每天都会有增量文件,而我们要将这些增量文件全部copy到异地linux主机,如下图

win系统与linux系统之间文件备份_第1张图片

win主机:

1、安装 rsync 客户端 (cwRsync)

2、同步脚本

linux主机:

1、安装rsync服务即可


linux配置:


linux的rsync的配置如下:

[tfsbackup]
path=/data/tfsbackup
comment=tfsbackup
ignore errors = yes
read only=no
write only=no
hosts allow=*
hosts deny=*
list=false
auth users=rsync
secrets file=/etc/rsyncd.secrets

win配置:

1、安装 cwRsync (附件中可以下载 或 https://www.itefix.net/cwrsync)

将文件解压,变量配置即可,命令行测试通过即可。

win系统与linux系统之间文件备份_第2张图片

2、同步脚本如下:脚本名暂定 tfs.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

"""
filename:tfs.py
function:检索指定目录下的1天内的文件,同步到服务器上。
"""
import os
import time
import glob
import subprocess
import os.path

expires = 172800                 #时间戳差值在2天,为了保险会校验两天内的增量文件
currentTime=int(time.time())    #获取当前时间戳

args=r'-az'
remotehost =r'[email protected]::tfsbackup'
passwordFile=r'--password-file=/cygdrive/c/cwrsync/rsyncd.secrets'
path = r'E:\tfs\*'
comm=r'c:\cwRsync\rsync.exe'

#以上为rsync最后的命令表现形式;/cygdrive/c/cwrsync/rsyncd.secrets表示c盘下的cwrsync/rsyncd.secrets文件。

srcpath=r'/cygdrive/e/tfs/'        #/cygdrive/e/表示windows系统的E盘,

filelist = glob.glob(path)  #获取给定路径下所有文件名

#过滤出最近2天内的文件,
def checkFileTime(filename):
    fileTime = os.stat(filename).st_mtime
    if (currentTime - fileTime > expires):
        pass
    else:
        filename = os.path.basename(filename)
        srcfile=srcpath+filename
        rsyncFile(srcfile)
#rsync到远程主机上
def rsyncFile(file):
    cmd = "%s %s %s %s %s" %(comm,args,file,remotehost,passwordFile)
    result = subprocess.call(cmd)
    if result != 0:
        print "rsync to " , remotehost , " fail ! !"
        time.sleep(10)
    else:
        print file , "rsync to " , remotehost , "successful !"

for filename in filelist:
    checkFileTime(filename)


因为备份的win主机上没有权限安装Python环境。所以转换到exe执行程序就可以了。


PyInstaller恰满足这个需求。本文PyInstaller的版本是2.0,支持Python2.7。下面讨论怎样安装,使用PyInstaller。

PyInstaller本身并不属于Python包。在安装 pyinstaller 之前假设你已经安装了python ,注意把python 环境变量配置好, 即 进入cmd后 输入 python 会进入 python shell.

pyinstaller安装:

1,下载pyinstaller并解压(可以去官网下载最新版)

C:\pyinstaller-2.0

2,安装最新版本的 pywin32-217.win32-py2.7.exe:

不然会出现错误Error: PyInstaller for Python 2.6+ on Windows needs pywin32.

3

C:\Users\xisuo>cd C:\pyinstaller-2.0
C:\pyinstaller-2.0>python pyinstaller.py -w --onefile D:\py\tfs.py

win系统与linux系统之间文件备份_第3张图片

上面的命令成功运行后tfs.py 会生成一个tfs文件夹。在这个文件夹下面会有一个名为dist的文件夹,此文件夹下面有转换好的tfs.exe。

win系统与linux系统之间文件备份_第4张图片

当你执行文件tfs.exe即可rsync到远程主机上。做计划任务即可。