• Python实现文件备份


    Python实现文件拷贝

    2017年8月27日

    1.实现目的

    统一时间对服务器某文件夹内文件进行备份保存,如若备份成功则不提示任何错误,否则将以邮件的形式告知管理员,备份出错。

    2.程序流程图

    主要流程图

     

    拷贝流程图

    3.代码编写

    1.MyMain函数

     1 [root@Python CheckCopyFiles]# cat MyMain.py 
     2 #!/usr/bin/env python
     3 
     4 import os
     5 import sys
     6 import MyFileZip
     7 
     8 def main() :
     9     dir1 = "/root/dir1"
    10     dir2 = "/root/dir2"
    11 
    12     if os.path.isdir(dir2) == False :
    13         os.mkdir(dir2)
    14     
    15     if os.path.isdir(dir1) :
    16         MyFileZip.FileCopy(dir1,dir2)
    17     else :
    18         sys.exit(-1)    
    19 
    20 if __name__ == "__main__" :
    21     main()
    22 [root@Python CheckCopyFiles]# 

    2.MyFile函数

     1 [root@Python CheckCopyFiles]# cat MyFileZip.py
     2 #!/usr/bin/env python
     3 
     4 import zipfile
     5 import time
     6 import os
     7 import MySendMail
     8 
     9 
    10 def FileCopy(dir1,dir2) :
    11     try:
    12         NowDate = time.strftime("%Y-%m-%d")
    13         Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
    14         zf = zipfile.ZipFile(Zfile,'w')
    15     
    16         for filename in os.listdir(dir1) :
    17             if os.path.isfile(dir1 + '/' + filename) :
    18                 zf.write(dir1 + '/' + filename)
    19                 os.remove(dir1 + '/' + filename)
    20         
    21         zf.close()
    22     except:
    23         MySendMail.SamMail(NowDate,dir1,dir2)
    24 [root@Python CheckCopyFiles]# 

    3.SendMail函数

     1 [root@Python CheckCopyFiles]# cat MySendMail.py
     2 #!/usr/bin/env python
     3 
     4 import smtplib
     5 import email.mime.text
     6 
     7 def SamMail(NowDate,dir1,dir2) :
     8     HOST = "smtp.163.com"
     9     SUBJECT = "Copy File Warning"
    10     TO = "发送的帐号"
    11     FROM = "来自于账户"
    12     Remask = "Copy dirctory warning"
    13 
    14     msg = email.mime.text.MIMEText("""
    15     <html>
    16         <body>
    17             <h1>Warning</h1>
    18             <h2>Time:%s</h2> 
    19             <h2>Dirctory:%s</h2> 
    20             <h2>Remask:%s</h2> 
    21         </body>
    22     </html>
    23     """ % (NowDate,dir1,"Copy File Error"),"html","utf-8")
    24 
    25     msg['Subject'] = SUBJECT
    26     msg['From'] = FROM
    27     msg['TO'] = TO
    28 
    29     try:
    30         server = smtplib.SMTP()
    31         server.connect(HOST,'25')
    32         server.starttls()
    33         server.login("帐号","密码")
    34         server.sendmail(FROM,TO,msg.as_string())
    35         server.quit()
    36     except:
    37         print ("Send mail Error")
    38 [root@Python CheckCopyFiles]# 

    4.实现效果

    4.1    建立新的文件

    1 [root@Python ~]# touch /root/dir1/7 /root/dir1/8
    2 [root@Python ~]# 

    4.2    执行代码

    1 [root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py 
    2 [root@Python ~]#

    4.3 查看文件

    1 [root@Python ~]# ls -l /root/dir1 -a
    2 total 0
    3 drwxrwxrwx. 2 root root   6 Aug 27 09:26 .
    4 dr-xr-x---. 6 root root 201 Aug 27 09:26 ..
    5 [root@Python ~]# 
     1 [root@Python ~]# ls -l /root/dir2/
     2 total 4
     3 -rw-r--r--. 1 root root 218 Aug 27 09:28 logfile_2017-08-27.zip
     4 [root@Python ~]# unzip -v /root/dir2/logfile_2017-08-27.zip 
     5 Archive:  /root/dir2/logfile_2017-08-27.zip
     6  Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
     7 --------  ------  ------- ---- ---------- ----- --------  ----
     8        0  Stored        0   0% 08-27-2017 09:27 00000000  root/dir1/7
     9        0  Stored        0   0% 08-27-2017 09:27 00000000  root/dir1/8
    10 --------          -------  ---                            -------
    11        0                0   0%                            2 files
    12 [root@Python ~]# 

    由此可见,dir1中的文件已经备份至/root/dir2/logfile_2017-08-27.zip中,且已经删除了原文件

    4.3    查看发送邮件效果

    修改一下源码:

     1 [root@Python CheckCopyFiles]# cat MyFileZip.py
     2 #!/usr/bin/env python
     3 
     4 import zipfile
     5 import time
     6 import os
     7 import MySendMail
     8 
     9 
    10 def FileCopy(dir1,dir2) :
    11     try:
    12         NowDate = time.strftime("%Y-%m-%d")
    13         Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
    14         zf = zipfile.ZipFile(Zfile,'w')
    15     
    16         for filename in os.listdir(dir1) :
    17             if os.path.isfile(dir1 + '/' + filename) :
    18                 zf.write(dir1 + '/' + filename)
    19                 os.remove(dir1 + '/' + filename)
    20         
    21         zf.close()
    22         sys.exit()
    23     except:
    24         MySendMail.SamMail(NowDate,dir1,dir2)
    25 [root@Python CheckCopyFiles]#  

    22行 sys 模块并未导入,故一定会出错

    执行效果如下:

    1 [root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py 
    2 [root@Python ~]#

    收到邮件的效果如下:

     

    只要把脚本写入crontab,那样就可以按时执行了,例如:

    1 [root@Python CheckCopyFiles]# crontab -l
    2 00 14 * * 0 /usr/bin/python /root/python/CheckCopyFiles/MyMain.py
    3 [root@Python CheckCopyFiles]# 

    意思是每周日14点调用/usr/bin/python 去执行/root/python/CheckCopyFiles/MyMain.py文件

    至此,由python写的备份脚本已经全部完成,人生苦短,我用python

  • 相关阅读:
    JS项目快速压缩(windows平台)
    Maven工程的POM继承
    Docker构建一个node镜像
    win10家庭版安装Docker for Windows
    linux,vim和bash命令小册
    vue文档阅读笔记——计算属性和侦听器
    nodejs的jekins部署
    `vue-router`的`History`模式下的项目发布
    花式图表,炫技时刻!PPT技能
    在创业之路上不断创新
  • 原文地址:https://www.cnblogs.com/NoneID/p/7441574.html
Copyright © 2020-2023  润新知