有时候我们一些windows上的服务器内容需要做双盘备份,但是又没有很多的资源。这时候需要有一个工具将需要备份的内容打包,然后自动上传到另外一个服务器上。下面是python代码:
"""本工具的功能是将某个目录下的东西打包成zip文件,然后上传到FTP上"""
from zipfile import *
from os.path import basename, isdir
from os import listdir, remove, stat
from ftplib import FTP
import time
import sys
def traverse(path):
prefix = path
if(isdir(path)):
for item in listdir(path):
traverse(path+'/'+item)
else:
print prefix
my_zipfile = ZipFile(my_zipfile_name,"a",ZIP_DEFLATED)
my_zipfile.write(prefix)
my_zipfile.close()
if __name__=='__main__':
## 第一行为说明,第二行为文件目录,第三行为ftp的ip,第四行为ftp端口,第五行为ftp用户,第六行为ftp密码,第七行为需要存到ftp的路径,第八行1时为保留本地压缩数据0时为不保留
config_file = open("config.txt","r")
config = config_file.readlines()
config_file.close()
path_to_zip = config[1][0:-1]
ftp_ip = config[2][0:-1]
ftp_port = config[3][0:-1]
ftp_user = config[4][0:-1]
ftp_passwd = config[5][0:-1]
ftp_path = config[6][0:-1]
is_save = config[7][0:-1]
## 打开log文件,输出重定向
log_file = open("log/"+time.strftime('%Y%m%d',time.localtime())+".log","w")
sys_stdout = sys.stdout
sys_stderr = sys.stderr
#sys.stdout.close()
#sys.stderr.close()
sys.stdout = log_file
sys.stderr = log_file
#sys.stdout = sys_stdout
#sys.stderr = sys_stderr
print "/n/n-------------------------------------------"
print time.strftime('%Y%m%d%h%M',time.localtime())
print "-------------------------------------------"
## 压缩打包指定目录下的所有文件
print "正在打包………………"
my_zipfile_name = "files/"+time.strftime('%Y%m%d',time.localtime())+".zip"
my_zipfile = ZipFile(my_zipfile_name,"w",ZIP_DEFLATED)
my_zipfile.close()
traverse(path_to_zip)
print "打包完毕,大小为"+str(stat(my_zipfile_name)[6])
## 将所得文件发送到ftp指定路径
print "连接ftp"
ftp = FTP()
ftp.debug(2)
ftp.connect(ftp_ip, ftp_port)
ftp.login(ftp_user, ftp_passwd)
bufsize = 1024
file_handler = open(my_zipfile_name,"rb")
print "正在传送………………"
ftp.cwd(ftp_path)
ftp.storbinary('STOR '+my_zipfile_name[6:],file_handler,bufsize)
file_handler.close()
ftp.close()
print "完成传送"
## 如果第八行为0,删除已处理文件
if is_save == '0':
print "正在删除"+my_zipfile_name
remove(my_zipfile_name)
print "已经完成删除"
## 关闭log文件
log_file.close()