近来书写 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的更多相关文章

  1. 贪心:SPOJ Backup Files

    BACKUP - Backup Files no tags  You run an IT company that backs up computer data for large offices. ...

  2. [PowerShell] Backup Folder and Files Across Network

    ## This Script is used to backup folder/files and delete the old backup files. ## Author: Stefanie # ...

  3. vim+python

    #!/bin/bash # install fisa vim config echo '===============================' echo 'start to install ...

  4. zookeeper与Kafka集群搭建及python代码测试

    Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...

  5. python 代码混淆工具汇总

    pyminifier Pyminifier is a Python code minifier, obfuscator, and compressor. Note For the latest, co ...

  6. Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...

  7. [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 ...

  8. TFS Express backup and restore

    When we setup source control server, we should always make a backup and restore plan for it. This ar ...

  9. [转]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 ...

随机推荐

  1. Winform开发框架之权限管理系统的改进

    权限管理系统,一直是很多Mis系统和一些常见的管理系统所需要的,所以一般可以作为独立的模块进行开发,需要的时候进行整合即可,不需要每次从头开发,除非特殊的系统需求.我在Winform开发框架介绍中的随 ...

  2. PHP实现上传文件并存进数据库的方法

    本文实例讲述了PHP实现上传文件并存进数据库的方法.分享给大家供大家参考.具体如下: show_add.php文件如下: <?php if(!isset($_REQUEST[''id'']) o ...

  3. [PE结构分析] 7.相对虚拟地址(RVA)和文件偏移间的转换

    RVA是相对虚拟地址(Relative Virtual Address)的缩写.RVA是当PE 文件被装载到内存中后,某个数据位置相对于文件头的偏移量. 例如:导入表的位置和大小可以从PE文件头中IM ...

  4. php中的字符串常用函数(一) strpos() 子字符首次出现的位置

    strpos($str, $needle); 1.返回$needle在$str首次出现的位置.(大小写敏感). 2.从php5开始$needle支持多字符.php4只能用单个字符. 3.能找到$nee ...

  5. gcd和拓展gcd算法

    gcd算法是用来求两个数最大公约数的算法,他是依靠辗转相除(中国好像叫辗转相减)法来求两个数的最大公约数,别的地方也有很多介绍不做过多赘述,主要提供代码供自己参考. gcd(int a,int b) ...

  6. 想当站长请立即使用Orchard

    其实早在很多年前我就一直有一个梦想,那就是那个网站当个站长,和各位有共同爱好的人成为朋友,很多年了虽然有了这个能力却没有了这个心情,成为了程序员却天天被程序玩. 最近几年一直从事C#方面的软件开发,基 ...

  7. C#常用集合的使用(转载)

    大多数集合都在System.Collections,System.Collections.Generic两个命名空间.其中System.Collections.Generic专门用于泛型集合. 针对特 ...

  8. HTML JavaScript的DOM操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...

  9. 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)

    先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...

  10. 在Seismic.NET下用最少的语句写出一个剖面显示程序

    用Seismic.NET开发地震剖面显示程序可以节省大量的时间,下面的代码展开了如何用最少的代码显示一个SEGY文件. // 用一行语句把 reader, pipeline, view 和 plot ...