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 ...
随机推荐
- CSS布局 -- 左右定宽,中间自适应
左右定宽,中间自适应 有几种方法可以实现 改变窗口大小看看? 方案一: 左右设置绝对定位,定宽,中间设置margin-left margin-right 查看 demo <!DOCTYPE h ...
- 关于VS2010中的TraceDebugging文件夹浅说
最近一段时间发现C盘莫名其妙的变小了,各种清理各种卸载还是没有.最后只能一个文件夹一个文件夹的找,最后针对“C:\ProgramData”(win7系统)文件夹,发现这个文件夹有3.9GB大小.然后一 ...
- 重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别
[源码下载] 重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别 作者:webabcd 介绍重新想象 Windows 8 Store Apps ...
- 泛函编程(16)-泛函状态-Functional State
初接触泛函状态觉着很不习惯.主要是在使用State数据类型时很难理解其中的原理,特别是泛函状态变迁机制(state transition mechanism):怎么状态就起了变化,实在难以跟踪.我想这 ...
- 【Qt】2.4 做一个“猜数字”的游戏
使用对话框和Qt设计师来实现一个相当简单的小游戏.同时将通过这个程序来看布局的隐藏和显示是如何来影响窗口界面的变化的. 新建一个Qt项目,把Qt Creator默认给的mainwindow.h.mai ...
- 深入.NET框架
.NET是微软公司在2000年推出的一个战略(平台). 其目的就是想 任何人使用任何终端设备在任何地方都可以访问微软提供的服务. .NET Framework两大组件: CLR(Common Lang ...
- 【iOS】Quartz2D简单介绍
一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图 ...
- 我所了解的WEB开发(3) - 彩虹的颜色
据说彩虹有七彩颜色,从外至内分别为:红.橙.黄.绿.青.蓝.紫.这些我倒是没有验证过,但是学生时代就不止一次色盲检测,还是让我足够确信对颜色的分辨应该和大多数人相似的. 还听说大多数哺乳动物是色盲.如 ...
- basket.js 源码分析
basket.js 源码分析 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此 ...
- c++类的定义《一》
最近好忙,一来要在店里看店,二来朋友办结婚酒,搞的我这几天好疲惫啊···博客又有好几天没提笔了. 下午简单看了下书,看到了类的部分,自己动手练习了一下 笔记:1.类是数据类型 / 它的变童就是对象 ...