用python编写脚本实现备份文件

需求:为所有的重要的文件创建相应的备份。


首先是问题解析:

1.找到那些文件是我们需要备份的

2.备份的文件要保存到哪里

3.怎么存储备份


问题的解决方案:

1.需要备份的文件和目录由一个列表指定

2.将备份保存到指定的备份文件夹中

3.将文件备份成一个zip文件。

4.zip的存档名称是当前的时间和日期


之后进行编码:

#!/usr/bin/env python
# coding=utf-8
# filename : backup_ver1.py

import os
import time

# set the file you need backup
source='/home/grace/python/'

# set the dir you store the backup file
target_dir='/home/grace/test/'

# backup filename 
target=target_dir + time.strftime('%Y%m%d%H%M%S')+'.zip'

# set zip command 
zip_command="zip -qr '%s' %s" %(target,''.join(source))

#Run the zip_command
if os.system(zip_command)==0:
    print 'Successful backup to',target
else:
    print 'Backup Failed!'

这里由几点需要解释:

1.zip命令的使用

linux zip命令的基本用法是:zip [参数] [打包后的文件名] [打包的目录路径]
linux zip命令参数列表:
-a     将文件转成ASCII模式
-F     尝试修复损坏的压缩文件
-h     显示帮助界面
-m     将文件压缩之后,删除源文件
-n 特定字符串    不压缩具有特定字尾字符串的文件
-o     将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q     安静模式,在压缩的时候不显示指令的执行过程
-r     将指定的目录下的所有子目录以及文件一起处理
-S     包含系统文件和隐含文件(S是大写)
-t 日期     把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy
举例:
将/home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的html.zip
zip –q –r   html.zip /home/Blinux/html
上面的命令操作是将绝对地址的文件及文件夹进行压缩.以下给出压缩相对路径目录
比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果.
zip –q –r html.zip html
比如现在我的html目录下,我操作的zip压缩命令是
zip –q –r html.zip *
以上是在安静模式下进行的,而且包含系统文件和隐含文件

linux zip命令的基本用法是:zip [参数] [打包后的文件名] [打包的目录路径]
linux zip命令参数列表:
-a     将文件转成ASCII模式-F     尝试修复损坏的压缩文件-h     显示帮助界面-m     将文件压缩之后,删除源文件
-n 特定字符串    不压缩具有特定字尾字符串的文件-o     将压缩文件内的所有文件的最新变动时间设为压缩时候的时间-q     安静模式,在压缩的时候不显示指令的执行过程-r     将指定的目录下的所有子目录以及文件一起处理-S     包含系统文件和隐含文件(S是大写)-t 日期     把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy
举例:
将/home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的html.zip
zip –q –r   html.zip /home/Blinux/html
上面的命令操作是将绝对地址的文件及文件夹进行压缩.以下给出压缩相对路径目录
比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果.
zip –q –r html.zip html
比如现在我的html目录下,我操作的zip压缩命令是
zip –q –r html.zip *
以上是在安静模式下进行的,而且包含系统文件和隐含文件

解压的命令:

linux unzip 命令详解

功能说明:解压缩zip文件

语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

参 数:

-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。

-f 更新现有的文件。

-l 显示压缩文件内所包含的文件。

-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

-t 检查压缩文件是否正确。

-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

-v 执行是时显示详细的信息。

-z 仅显示压缩文件的备注文字。

-a 对文本文件进行必要的字符转换。

-b 不要对文本文件进行字符转换。

-C 压缩文件中的文件名称区分大小写。

-j 不处理压缩文件中原有的目录路径。

-L 将压缩文件中的全部文件名改为小写。

-M 将输出结果送到more程序处理。

-n 解压缩时不要覆盖原有的文件。

-o 不必先询问用户,unzip执行后覆盖原有文件。

-P<密码> 使用zip的密码选项。

-q 执行时不显示任何信息。

-s 将文件名中的空白字符转换为底线字符。

-V 保留VMS的文件版本信息。

-X 解压缩时同时回存文件原来的UID/GID。

[.zip文件] 指定.zip压缩文件。

[文件] 指定要处理.zip压缩文件中的哪些文件。

-d<目录> 指定文件解压缩后所要存储的目录。

-x<文件> 指定不要处理.zip压缩文件中的哪些文件。

-Z unzip -Z等于执行zipinfo指令

范例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。

1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:

# zip -r yasuo.zip abc.txt dir1

2.我下载了一个yasuo.zip文件,想解压缩:

# unzip yasuo.zip

3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:

# unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。

4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

# unzip -v large.zip

5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了

# unzip -t large.zip

6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

# unzip -j music.zip


********************************************************************

之后在回到我们的程序当中

我们使用了os和time模块,所以我们输入它们。如果你由多个目录中的文件需要备份,那么你可以选择source的这里采用列表

来指定你所需要备份的文件和目录。目标目录我们使用target_dir来指定。zip归档的名称是目前的日期和时间,我们使用time.strftime()

函数获得。其中还包括了zip的扩展名。


我们可以把上述的程序做一些改进,使用当前的日期命名文件夹,之后使用时间来作为文件名

#!/usr/bin/env python
# coding=utf-8
#filename : backup_ver2.py
# author : chicho
# date : 2014-03-22

import os
import time
#the file dir you need backup
source = '/home/grace/python/'

#the dir you store the target 
target_dir = '/home/grace/test'

#create a directory to save you backup file
today = target_dir +os.sep+ time.strftime('%Y%m%d')

now = time.strftime('%H%M%S')

if not os.path.exists(today):
    os.mkdir(today)
    print 'Successful created directory',today

target = today + os.sep + now + '.zip'

zip_command="zip -qr '%s' %s" %(target,''.join(source))

#Run the backup_ver2.py
if os.system(zip_command)==0:
    print 'Sucessful backup to',target
else:
    print 'Backup Failed!'

但是这个时候文件还是可以改进的,比如说如果我们的文件就是一个时间,那么我们不知道我们备份的文件是什么,按照文件的名字来备份的话

这样相对来说是比较清楚的。这样,要是程序和用户有一些交互的话那样就更好了。


#!/usr/bin/env python
# coding=utf-8
# filename : backup_ver3.py
import os
import time

source='/home/grace/python/'

target_dir='/home/grace/test/'

today=target_dir+time.strftime('%Y%m%d')

now = time.strftime("%H%M")

comment=raw_input('Enter comment->')

if(comment==0):
    target=today+os.sep+now+'.zip'
else:
    target = today + os.sep+now +'_'+\
            comment.replace(' ','_')+'.zip'

if not os.path.exists(today):
    os.mkdir(today)
    print 'Sucessfully create directory',today

zip_command="zip -qr '%s' %s" %(target,''.join(source))

if os.system(zip_command)==0:
    print 'Sucessfully backup to',target
else:
    print 'Backup Failed!'



之后便可以看见运行的结果。





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是使用Python脚本从RDS上下载MySQL备份文件的具体步骤: 1. 安装boto3库 boto3库是Python的AWS SDK,可以方便地与AWS服务进行交互。可以使用以下命令安装boto3库: ``` pip install boto3 ``` 2. 配置AWS访问密钥 在使用boto3访问AWS服务之前,需要先配置AWS访问密钥。可以在AWS控制台上创建一个IAM用户,并生成该用户的Access Key和Secret Access Key,并将该用户加入RDS的访问策略组中。 3. 编写Python脚本 以下是一个从RDS上下载MySQL备份文件Python脚本示例: ``` python import boto3 # 配置AWS访问密钥 aws_access_key_id = 'your_access_key_id' aws_secret_access_key = 'your_secret_access_key' # 创建rds client对象 client = boto3.client('rds', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region_name='your_rds_region') # 获取最近的mysql备份文件 response = client.describe_db_log_files( DBInstanceIdentifier='your_db_instance_id', FilenameContains='mysql', FileLastWritten=0 ) # 下载mysql备份文件 if len(response['DescribeDBLogFiles']) > 0: file = response['DescribeDBLogFiles'][0] filename = file['LogFileName'] download_response = client.download_db_log_file_portion( DBInstanceIdentifier='your_db_instance_id', LogFileName=filename ) with open('mysql_backup.sql', 'wb') as f: f.write(download_response['LogFileData']) ``` 需要将上面代码中的 `your_access_key_id`,`your_secret_access_key`,`your_rds_region`,`your_db_instance_id` 替换成自己的AWS访问密钥、RDS所在区域和实例ID。 4. 运行Python脚本 将上面的Python脚本保存为一个.py文件,然后在命令行中运行该文件即可从RDS上下载MySQL备份文件: ``` python download_mysql_backup.py ``` 下载下来的MySQL备份文件会保存在当前目录下的mysql_backup.sql文件中。 注意事项: - 如果RDS实例启用了加密,需要在下载备份文件时指定KMS密钥ID。可以在下载备份文件时添加以下参数: ``` python KmsKeyId='your_kms_key_id' ``` 其中,`your_kms_key_id`是KMS密钥ID。 - 如果备份文件比较大,可以使用分块下载的方式下载文件,避免一次性下载整个文件。可以在下载备份文件时添加以下参数: ``` python MaxRecords=1000, Marker='your_marker' ``` 其中,`MaxRecords`表示每次下载的最大记录数,`Marker`表示上一次下载的最后一个记录的标识符。可以将下载的备份文件按照每个分块保存到本地,最后将所有分块合并为一个文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值