Python Backup Files
近来书写 Python 脚本进行替换以前的 shell 脚本,发现 Python 优于 shell 的最直观的一点Python 结构明了,可读性高(本人认为)在此做一些记录
本次记录利用 Python Script
1,SVN 备份 ,封装 paramiko的 sftp 和 ssh connection 和 ssh_exec_command
2,删除过期文件
1,SVN 备份
准备:Python Paramiko Install
方法1: 直接使用 pip 进行安装
pip install paramiko
方法2:下载源码进行安装
paramiko-1.15.2.tar.gz 主要文件
ecdsa-0.13.tar.gz 依赖文件
pycrypto-2.6.1.tar.gz 依赖文件
.install ecdsa
tar xzf ecdsa-0.13.tar.gz && cd ecdsa-0.13 && python setup.py install
.install pycrypto
tar xzf pycrypto-2.6..tar.gz && cd pycrypto-2.6. && python setup.py install
.install paramiko
tar xzf paramiko-1.15..tar.gz && cd paramiko-1.15. && python setup.py install
Python Script
#!/usr/bin/env python
# _*_coding:utf-8_*_
# author: 'lonny'
# dateTime: '15/11/16'
# motto: 'Good memory as bad written' import datetime
import os
import tarfile
import subprocess # usvn 备份--------------------------------------------------------------
class Usvn_Backend(object):
# ------------------------------------------------------------------
def __init__(self):
self.date_time = datetime.datetime.now().strftime('%Y-%m-%d-%H')
self.Root_Directory = "/software"
self.back_directory = "usvn"
self.Remote_Send_Dir = "/install/backup/usvnback" # 打包文件------------------------------------------------------------
def Package(self):
global tarfile_name
print "\033[32mWaitIng Packaging..........\033[0m"
os.chdir(self.Root_Directory)
tarfile_name = "%s-%s.tar.gz" % (self.back_directory, self.date_time)
tar = tarfile.open(tarfile_name, "w:gz")
tar.add(self.back_directory)
tar.close()
if os.path.exists(tarfile_name):
print "\033[32m..........Packaging Is SuccessFul!!!\033[32m"
else:
print "\033[32m..........Packaging Is Failed!!!\033[0m" # 执行远程命令传送文件---------------------------------------------------------
class SSHConnection(object):
"""""" # ----------------------------------------------------------------------
def __init__(self, host, username, password, port=22):
"""Initialize and setup connection"""
self.sftp = None
self.sftp_open = False # open SSH Transport stream
self.transport = paramiko.Transport((host, port)) self.transport.connect(username=username, password=password) self.session = self.transport.open_channel(kind='session') # ----------------------------------------------------------------------
def _openSFTPConnection(self):
"""
Opens an SFTP connection if not already open
"""
if not self.sftp_open:
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
self.sftp_open = True # ----------------------------------------------------------------------
#下载文件时需要指定两端文件名
def get(self, remote_path, local_path=None):
"""
Copies a file from the remote host to the local host.
"""
self._openSFTPConnection()
self.sftp.get(remote_path, local_path) # ----------------------------------------------------------------------
#传送文件是需要两端都要指定文件名称
def put(self, local_path, remote_path=None):
"""
Copies a file from the local host to the remote host
"""
self._openSFTPConnection()
self.sftp.put(local_path, remote_path) # ----------------------------------------------------------------------
def run(self, command, nbytes=4096):
# Run Command out|err
stdout_data = []
stderr_data = []
self.session.exec_command(command)
while True:
if self.session.recv_ready():
stdout_data.append(self.session.recv(nbytes))
if self.session.recv_stderr_ready():
stderr_data.append(self.session.recv_stderr(nbytes))
if self.session.exit_status_ready():
break
print "\033[31m*********************\033[0m"
print '\033[32mExit status is: \033[0m', self.session.recv_exit_status()
print "\033[31m*********************\033[0m"
print ''.join(stdout_data)
print ''.join(stderr_data) def close(self):
"""
Close SFTP connection and ssh connection
"""
if self.sftp_open:
self.sftp.close()
self.sftp_open = False
self.transport.close()
self.session.close() if __name__ == '__main__':
try:
try:
import paramiko
except ImportError:
print "\033[32mInstalling Paramiko.........\033[0m"
install_paramiko = "pip install paramiko"
subprocess.call(install_paramiko, shell=True)
# Run Usvn Unpack--------------------------------------------------------------
unpack = Usvn_Backend()
unpack.Package()
# Put UsvnBack Files To Remote Server
Send_Files = SSHConnection(ipaddress, user, password)
#Set local_path Names,remote_path Names
local_path_files = "%s/%s" % (unpack.Root_Directory, tarfile_name)
remote_path_files = "%s/%s" % (unpack.Remote_Send_Dir, tarfile_name)
Send_Files.put(local_path_files, remote_path_files)
#remove tarfiles
os.chdir(unpack.Root_Directory)
os.remove(tarfile_name)
#remove end!!!!
Send_Files.close()
except KeyboardInterrupt:
print "Contorl+C+Z"
2,删除过期文件
#!/usr/bin/env python
# _*_coding:utf-8_*_
# author: 'lonny'
# dateTime: '15/12/15'
# motto: 'Good memory as bad written' import os
import sys
import time #删除文件-----------------------------------------------------------------
def remove(path):
"""
Remove the file or directory
"""
if os.path.isdir(path):
try:
os.rmdir(path)
except OSError:
print "Unable to remove folder: %s" % path
else:
try:
if os.path.exists(path):
os.remove(path)
except OSError:
print "Unable to remove file: %s" % path # 遍历输入的文件夹,查询出number_of_days天前的文件,进行删除---------------------
def cleanup(number_of_days, path):
"""
Removes files from the passed in path that are older than or equal
to the number_of_days
"""
time_in_secs = time.time() - (number_of_days * 24 * 60 * 60)
"""
计算出当前时间与number_of_days天前的毫秒差
"""
for root, dirs, files in os.walk(path, topdown=False):
for file_ in files:
full_path = os.path.join(root, file_)
stat = os.stat(full_path) if stat.st_mtime <= time_in_secs:
remove(full_path) if not os.listdir(root):
remove(root) # ----------------------------------------------------------------------
if __name__ == "__main__":
#sys.argv[1]天数 sys.argv[2]要遍历的目录
days, path = int(sys.argv[1]), sys.argv[2]
cleanup(days, path)
Python Backup Files的更多相关文章
- 贪心:SPOJ Backup Files
BACKUP - Backup Files no tags You run an IT company that backs up computer data for large offices. ...
- [PowerShell] Backup Folder and Files Across Network
## This Script is used to backup folder/files and delete the old backup files. ## Author: Stefanie # ...
- vim+python
#!/bin/bash # install fisa vim config echo '===============================' echo 'start to install ...
- zookeeper与Kafka集群搭建及python代码测试
Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...
- python 代码混淆工具汇总
pyminifier Pyminifier is a Python code minifier, obfuscator, and compressor. Note For the latest, co ...
- Python检查 文件备份是否正常 云备份进程是否正常运行
场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...
- [python] File path and system path
1. get files in the current directory with the assum that the directory is like this: a .py |----dat ...
- TFS Express backup and restore
When we setup source control server, we should always make a backup and restore plan for it. This ar ...
- [转]Installing python 2.7 on centos 6.3. Follow this sequence exactly for centos machine only
Okay for centos 6.4 also On apu.0xdata.loc, after this install was done $ which python /usr/local/bi ...
随机推荐
- Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用
最近一直在做一些技术性的研究和框架改进工作,博客也落下好几天没有更新了,也该是时候静下心来,总结这段时间的一些技术改进的经验了.和上一阶段的CRM系统开发和技术研究一样,我都喜欢在一个项目或者模块完成 ...
- JAVA的网络编程基础概念
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...
- Servlet3.0 Test
1. Servlet3.0 Test and Annotation used 你可以从tomcat7中lib文件夹中找到servlet-api.jar package com.goodfan.serv ...
- poi 导出 excel
private void exportAssetExcel(HttpServletRequest request, HttpServletResponse response) throws IOExc ...
- PHP学习笔记:对命名空间(namespace)学习资料的翻译
Name collisions means: you create a function named db_connect, and somebody elses code that you use ...
- php学习笔记:自定义函数的调用
PHP内置了超过1000个函数,因此函数使得PHP成为一门非常强大的语言.大多数时候我们使用系统的内置函数就可以满足需求,但是自定义函数通过将一组代码封装起来,使代码进行复用,程序结构与逻辑更加清晰. ...
- ASP.NET WebAPI 11 参数验证
在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参 ...
- 为什么要用rem
为什么要用rem 参考文章web app变革之rem 公司使用的375*667(也就是iPhone6)作为缩放比例标准,设计师是按照750px的标准出图 为了保证在不同的屏幕下显示效果基本等同,为此规 ...
- jQuery高级技巧——性能优化篇
通过CDN(Content Delivery Network)引入jQuery库 要提升网站中javascript的性能的最简单的一步就是引入最新版本的jQuery库,新发布的版本通常在性能上会有 ...
- NLog 自定义字段 写入 oracle
1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...