文件组织与管理

常用文件管理函数

模块函数名说明
osos.remove删除文件
osos.rmdir删除文件夹,当删除文件夹时,该文件夹必须是空文件夹
osos.renames文件重命名/移动,目标文件要不存在,才能重命名或移动,否则会报错
osos.listdir返回目录下文件或文件夹名
osos.makdirs创建文件夹(多级或单级)
osos.path.basename返回文件名
osos.path.dirname返回上级文件路径
osos.path.exists判断文件/文件夹是否存在
osos.path.getsize返回文件大小
osos.path.getctimecreate,文件创建日期,最常用
osos.path.getatimeaccess,最近访问日期
osos.path.getmtimemodify,最近修改日期
shutilshutil.copyfile复制文件
shutilshutil.copytree递归复制整个目录树
shutilshutil.rmtree删除整个目录,即使该目录非空,也会把整个目录删除
shutilshutil.move移动文件或目录到目标位置,目标文件如果已经存在,则会覆盖

其中最常见的为:

模块函数名说明应用场景推荐
shutilshutil.copyfile复制文件处理文件时
shutilshutil.copytree递归复制整个目录树处理文件夹时
osos.remove删除文件
osos.rmdir删除文件夹,当删除文件夹时,该文件夹必须是空文件夹处理文件时
shutilshutil.rmtree删除整个目录,即使该目录非空,也会把整个目录删除处理文件夹时
shutilshutil.move移动文件或目录到目标位置处理文件夹时,目标文件如果已经存在,则会覆盖

基于以上知识,我们来完成两个作业:

  1. 已知如下目录,tmp中存储数据库每周全量备份(以full_backup开头)和每日增量备份数据(以diff_backup开头)。现需做以下处理
    • 将每天tmp目录下新增的文件移动备份到文件夹backups中。
    • backups文件夹中,全量备份数据仅保留最新的8份,增量数据仅保留45份。

在这里插入图片描述

# 创建示例文件
import pandas as pd
import datetime as dt
tmp_fold = '../data/db_backup/tmp'
date_range = pd.date_range('20200101','20200305')
date_range = [(dt.datetime.strftime(x,'%Y-%m-%d'),dt.datetime.weekday(x) + 1) for x in date_range]
for date,weeknum in date_range:
    if weeknum == 7:
        outputfile = f'{tmp_fold}/full_backup_{date}.bak'
    else:
        outputfile = f'{tmp_fold}/diff_backup_{date}.bak'
    with open(outputfile,'w',encoding='utf-8') as wf:
        wf.write(date+'\n')

在这里插入图片描述

import os
import shutil
print(os.listdir('../data/db_backup/tmp'))
['diff_backup_2020-01-01.bak', 'diff_backup_2020-01-02.bak', 'diff_backup_2020-01-03.bak', 'diff_backup_2020-01-04.bak', 'diff_backup_2020-01-06.bak', 'diff_backup_2020-01-07.bak', 'diff_backup_2020-01-08.bak', 'diff_backup_2020-01-09.bak', 'diff_backup_2020-01-10.bak', 'diff_backup_2020-01-11.bak', 'diff_backup_2020-01-13.bak', 'diff_backup_2020-01-14.bak', 'diff_backup_2020-01-15.bak', 'diff_backup_2020-01-16.bak', 'diff_backup_2020-01-17.bak', 'diff_backup_2020-01-18.bak', 'diff_backup_2020-01-20.bak', 'diff_backup_2020-01-21.bak', 'diff_backup_2020-01-22.bak', 'diff_backup_2020-01-23.bak', 'diff_backup_2020-01-24.bak', 'diff_backup_2020-01-25.bak', 'diff_backup_2020-01-27.bak', 'diff_backup_2020-01-28.bak', 'diff_backup_2020-01-29.bak', 'diff_backup_2020-01-30.bak', 'diff_backup_2020-01-31.bak', 'diff_backup_2020-02-01.bak', 'diff_backup_2020-02-03.bak', 'diff_backup_2020-02-04.bak', 'diff_backup_2020-02-05.bak', 'diff_backup_2020-02-06.bak', 'diff_backup_2020-02-07.bak', 'diff_backup_2020-02-08.bak', 'diff_backup_2020-02-10.bak', 'diff_backup_2020-02-11.bak', 'diff_backup_2020-02-12.bak', 'diff_backup_2020-02-13.bak', 'diff_backup_2020-02-14.bak', 'diff_backup_2020-02-15.bak', 'diff_backup_2020-02-17.bak', 'diff_backup_2020-02-18.bak', 'diff_backup_2020-02-19.bak', 'diff_backup_2020-02-20.bak', 'diff_backup_2020-02-21.bak', 'diff_backup_2020-02-22.bak', 'diff_backup_2020-02-24.bak', 'diff_backup_2020-02-25.bak', 'diff_backup_2020-02-26.bak', 'diff_backup_2020-02-27.bak', 'diff_backup_2020-02-28.bak', 'diff_backup_2020-02-29.bak', 'diff_backup_2020-03-02.bak', 'diff_backup_2020-03-03.bak', 'diff_backup_2020-03-04.bak', 'diff_backup_2020-03-05.bak', 'full_backup_2020-01-05.bak', 'full_backup_2020-01-12.bak', 'full_backup_2020-01-19.bak', 'full_backup_2020-01-26.bak', 'full_backup_2020-02-02.bak', 'full_backup_2020-02-09.bak', 'full_backup_2020-02-16.bak', 'full_backup_2020-02-23.bak', 'full_backup_2020-03-01.bak']
# 首先,我们将tmp目录下的文件全部移动到backup中
tmp_fold = '../data/db_backup/tmp'
tmp_filenames = os.listdir(tmp_fold)
tmp_files = [f'{tmp_fold}/{tmp_filename}' for tmp_filename in tmp_filenames]
print(tmp_files)
['../data/db_backup/tmp/diff_backup_2020-01-01.bak', '../data/db_backup/tmp/diff_backup_2020-01-02.bak', '../data/db_backup/tmp/diff_backup_2020-01-03.bak', '../data/db_backup/tmp/diff_backup_2020-01-04.bak', '../data/db_backup/tmp/diff_backup_2020-01-06.bak', '../data/db_backup/tmp/diff_backup_2020-01-07.bak', '../data/db_backup/tmp/diff_backup_2020-01-08.bak', '../data/db_backup/tmp/diff_backup_2020-01-09.bak', '../data/db_backup/tmp/diff_backup_2020-01-10.bak', '../data/db_backup/tmp/diff_backup_2020-01-11.bak', '../data/db_backup/tmp/diff_backup_2020-01-13.bak', '../data/db_backup/tmp/diff_backup_2020-01-14.bak', '../data/db_backup/tmp/diff_backup_2020-01-15.bak', '../data/db_backup/tmp/diff_backup_2020-01-16.bak', '../data/db_backup/tmp/diff_backup_2020-01-17.bak', '../data/db_backup/tmp/diff_backup_2020-01-18.bak', '../data/db_backup/tmp/diff_backup_2020-01-20.bak', '../data/db_backup/tmp/diff_backup_2020-01-21.bak', '../data/db_backup/tmp/diff_backup_2020-01-22.bak', '../data/db_backup/tmp/diff_backup_2020-01-23.bak', '../data/db_backup/tmp/diff_backup_2020-01-24.bak', '../data/db_backup/tmp/diff_backup_2020-01-25.bak', '../data/db_backup/tmp/diff_backup_2020-01-27.bak', '../data/db_backup/tmp/diff_backup_2020-01-28.bak', '../data/db_backup/tmp/diff_backup_2020-01-29.bak', '../data/db_backup/tmp/diff_backup_2020-01-30.bak', '../data/db_backup/tmp/diff_backup_2020-01-31.bak', '../data/db_backup/tmp/diff_backup_2020-02-01.bak', '../data/db_backup/tmp/diff_backup_2020-02-03.bak', '../data/db_backup/tmp/diff_backup_2020-02-04.bak', '../data/db_backup/tmp/diff_backup_2020-02-05.bak', '../data/db_backup/tmp/diff_backup_2020-02-06.bak', '../data/db_backup/tmp/diff_backup_2020-02-07.bak', '../data/db_backup/tmp/diff_backup_2020-02-08.bak', '../data/db_backup/tmp/diff_backup_2020-02-10.bak', '../data/db_backup/tmp/diff_backup_2020-02-11.bak', '../data/db_backup/tmp/diff_backup_2020-02-12.bak', '../data/db_backup/tmp/diff_backup_2020-02-13.bak', '../data/db_backup/tmp/diff_backup_2020-02-14.bak', '../data/db_backup/tmp/diff_backup_2020-02-15.bak', '../data/db_backup/tmp/diff_backup_2020-02-17.bak', '../data/db_backup/tmp/diff_backup_2020-02-18.bak', '../data/db_backup/tmp/diff_backup_2020-02-19.bak', '../data/db_backup/tmp/diff_backup_2020-02-20.bak', '../data/db_backup/tmp/diff_backup_2020-02-21.bak', '../data/db_backup/tmp/diff_backup_2020-02-22.bak', '../data/db_backup/tmp/diff_backup_2020-02-24.bak', '../data/db_backup/tmp/diff_backup_2020-02-25.bak', '../data/db_backup/tmp/diff_backup_2020-02-26.bak', '../data/db_backup/tmp/diff_backup_2020-02-27.bak', '../data/db_backup/tmp/diff_backup_2020-02-28.bak', '../data/db_backup/tmp/diff_backup_2020-02-29.bak', '../data/db_backup/tmp/diff_backup_2020-03-02.bak', '../data/db_backup/tmp/diff_backup_2020-03-03.bak', '../data/db_backup/tmp/diff_backup_2020-03-04.bak', '../data/db_backup/tmp/diff_backup_2020-03-05.bak', '../data/db_backup/tmp/full_backup_2020-01-05.bak', '../data/db_backup/tmp/full_backup_2020-01-12.bak', '../data/db_backup/tmp/full_backup_2020-01-19.bak', '../data/db_backup/tmp/full_backup_2020-01-26.bak', '../data/db_backup/tmp/full_backup_2020-02-02.bak', '../data/db_backup/tmp/full_backup_2020-02-09.bak', '../data/db_backup/tmp/full_backup_2020-02-16.bak', '../data/db_backup/tmp/full_backup_2020-02-23.bak', '../data/db_backup/tmp/full_backup_2020-03-01.bak']
backup_fold = '../data/db_backup/backups'
backup_files = [f'{backup_fold}/{tmp_filename}'  for tmp_filename in tmp_filenames]
print(backup_files)
['../data/db_backup/backups/diff_backup_2020-01-01.bak', '../data/db_backup/backups/diff_backup_2020-01-02.bak', '../data/db_backup/backups/diff_backup_2020-01-03.bak', '../data/db_backup/backups/diff_backup_2020-01-04.bak', '../data/db_backup/backups/diff_backup_2020-01-06.bak', '../data/db_backup/backups/diff_backup_2020-01-07.bak', '../data/db_backup/backups/diff_backup_2020-01-08.bak', '../data/db_backup/backups/diff_backup_2020-01-09.bak', '../data/db_backup/backups/diff_backup_2020-01-10.bak', '../data/db_backup/backups/diff_backup_2020-01-11.bak', '../data/db_backup/backups/diff_backup_2020-01-13.bak', '../data/db_backup/backups/diff_backup_2020-01-14.bak', '../data/db_backup/backups/diff_backup_2020-01-15.bak', '../data/db_backup/backups/diff_backup_2020-01-16.bak', '../data/db_backup/backups/diff_backup_2020-01-17.bak', '../data/db_backup/backups/diff_backup_2020-01-18.bak', '../data/db_backup/backups/diff_backup_2020-01-20.bak', '../data/db_backup/backups/diff_backup_2020-01-21.bak', '../data/db_backup/backups/diff_backup_2020-01-22.bak', '../data/db_backup/backups/diff_backup_2020-01-23.bak', '../data/db_backup/backups/diff_backup_2020-01-24.bak', '../data/db_backup/backups/diff_backup_2020-01-25.bak', '../data/db_backup/backups/diff_backup_2020-01-27.bak', '../data/db_backup/backups/diff_backup_2020-01-28.bak', '../data/db_backup/backups/diff_backup_2020-01-29.bak', '../data/db_backup/backups/diff_backup_2020-01-30.bak', '../data/db_backup/backups/diff_backup_2020-01-31.bak', '../data/db_backup/backups/diff_backup_2020-02-01.bak', '../data/db_backup/backups/diff_backup_2020-02-03.bak', '../data/db_backup/backups/diff_backup_2020-02-04.bak', '../data/db_backup/backups/diff_backup_2020-02-05.bak', '../data/db_backup/backups/diff_backup_2020-02-06.bak', '../data/db_backup/backups/diff_backup_2020-02-07.bak', '../data/db_backup/backups/diff_backup_2020-02-08.bak', '../data/db_backup/backups/diff_backup_2020-02-10.bak', '../data/db_backup/backups/diff_backup_2020-02-11.bak', '../data/db_backup/backups/diff_backup_2020-02-12.bak', '../data/db_backup/backups/diff_backup_2020-02-13.bak', '../data/db_backup/backups/diff_backup_2020-02-14.bak', '../data/db_backup/backups/diff_backup_2020-02-15.bak', '../data/db_backup/backups/diff_backup_2020-02-17.bak', '../data/db_backup/backups/diff_backup_2020-02-18.bak', '../data/db_backup/backups/diff_backup_2020-02-19.bak', '../data/db_backup/backups/diff_backup_2020-02-20.bak', '../data/db_backup/backups/diff_backup_2020-02-21.bak', '../data/db_backup/backups/diff_backup_2020-02-22.bak', '../data/db_backup/backups/diff_backup_2020-02-24.bak', '../data/db_backup/backups/diff_backup_2020-02-25.bak', '../data/db_backup/backups/diff_backup_2020-02-26.bak', '../data/db_backup/backups/diff_backup_2020-02-27.bak', '../data/db_backup/backups/diff_backup_2020-02-28.bak', '../data/db_backup/backups/diff_backup_2020-02-29.bak', '../data/db_backup/backups/diff_backup_2020-03-02.bak', '../data/db_backup/backups/diff_backup_2020-03-03.bak', '../data/db_backup/backups/diff_backup_2020-03-04.bak', '../data/db_backup/backups/diff_backup_2020-03-05.bak', '../data/db_backup/backups/full_backup_2020-01-05.bak', '../data/db_backup/backups/full_backup_2020-01-12.bak', '../data/db_backup/backups/full_backup_2020-01-19.bak', '../data/db_backup/backups/full_backup_2020-01-26.bak', '../data/db_backup/backups/full_backup_2020-02-02.bak', '../data/db_backup/backups/full_backup_2020-02-09.bak', '../data/db_backup/backups/full_backup_2020-02-16.bak', '../data/db_backup/backups/full_backup_2020-02-23.bak', '../data/db_backup/backups/full_backup_2020-03-01.bak']
for index,(tmp_file,backup_file) in enumerate(zip(tmp_files,backup_files)):
#     os.renames(tmp_file,backup_file)
    shutil.move(tmp_file,backup_file) # 推荐shutil.move
    print(f'{index+1},{tmp_file} ---> {backup_file}')
1,../data/db_backup/tmp/diff_backup_2020-01-01.bak ---> ../data/db_backup/backups/diff_backup_2020-01-01.bak
2,../data/db_backup/tmp/diff_backup_2020-01-02.bak ---> ../data/db_backup/backups/diff_backup_2020-01-02.bak
3,../data/db_backup/tmp/diff_backup_2020-01-03.bak ---> ../data/db_backup/backups/diff_backup_2020-01-03.bak
4,../data/db_backup/tmp/diff_backup_2020-01-04.bak ---> ../data/db_backup/backups/diff_backup_2020-01-04.bak
5,../data/db_backup/tmp/diff_backup_2020-01-06.bak ---> ../data/db_backup/backups/diff_backup_2020-01-06.bak
6,../data/db_backup/tmp/diff_backup_2020-01-07.bak ---> ../data/db_backup/backups/diff_backup_2020-01-07.bak
7,../data/db_backup/tmp/diff_backup_2020-01-08.bak ---> ../data/db_backup/backups/diff_backup_2020-01-08.bak
8,../data/db_backup/tmp/diff_backup_2020-01-09.bak ---> ../data/db_backup/backups/diff_backup_2020-01-09.bak
9,../data/db_backup/tmp/diff_backup_2020-01-10.bak ---> ../data/db_backup/backups/diff_backup_2020-01-10.bak
10,../data/db_backup/tmp/diff_backup_2020-01-11.bak ---> ../data/db_backup/backups/diff_backup_2020-01-11.bak
11,../data/db_backup/tmp/diff_backup_2020-01-13.bak ---> ../data/db_backup/backups/diff_backup_2020-01-13.bak
12,../data/db_backup/tmp/diff_backup_2020-01-14.bak ---> ../data/db_backup/backups/diff_backup_2020-01-14.bak
13,../data/db_backup/tmp/diff_backup_2020-01-15.bak ---> ../data/db_backup/backups/diff_backup_2020-01-15.bak
14,../data/db_backup/tmp/diff_backup_2020-01-16.bak ---> ../data/db_backup/backups/diff_backup_2020-01-16.bak
15,../data/db_backup/tmp/diff_backup_2020-01-17.bak ---> ../data/db_backup/backups/diff_backup_2020-01-17.bak
16,../data/db_backup/tmp/diff_backup_2020-01-18.bak ---> ../data/db_backup/backups/diff_backup_2020-01-18.bak
17,../data/db_backup/tmp/diff_backup_2020-01-20.bak ---> ../data/db_backup/backups/diff_backup_2020-01-20.bak
18,../data/db_backup/tmp/diff_backup_2020-01-21.bak ---> ../data/db_backup/backups/diff_backup_2020-01-21.bak
19,../data/db_backup/tmp/diff_backup_2020-01-22.bak ---> ../data/db_backup/backups/diff_backup_2020-01-22.bak
20,../data/db_backup/tmp/diff_backup_2020-01-23.bak ---> ../data/db_backup/backups/diff_backup_2020-01-23.bak
21,../data/db_backup/tmp/diff_backup_2020-01-24.bak ---> ../data/db_backup/backups/diff_backup_2020-01-24.bak
22,../data/db_backup/tmp/diff_backup_2020-01-25.bak ---> ../data/db_backup/backups/diff_backup_2020-01-25.bak
23,../data/db_backup/tmp/diff_backup_2020-01-27.bak ---> ../data/db_backup/backups/diff_backup_2020-01-27.bak
24,../data/db_backup/tmp/diff_backup_2020-01-28.bak ---> ../data/db_backup/backups/diff_backup_2020-01-28.bak
25,../data/db_backup/tmp/diff_backup_2020-01-29.bak ---> ../data/db_backup/backups/diff_backup_2020-01-29.bak
26,../data/db_backup/tmp/diff_backup_2020-01-30.bak ---> ../data/db_backup/backups/diff_backup_2020-01-30.bak
27,../data/db_backup/tmp/diff_backup_2020-01-31.bak ---> ../data/db_backup/backups/diff_backup_2020-01-31.bak
28,../data/db_backup/tmp/diff_backup_2020-02-01.bak ---> ../data/db_backup/backups/diff_backup_2020-02-01.bak
29,../data/db_backup/tmp/diff_backup_2020-02-03.bak ---> ../data/db_backup/backups/diff_backup_2020-02-03.bak
30,../data/db_backup/tmp/diff_backup_2020-02-04.bak ---> ../data/db_backup/backups/diff_backup_2020-02-04.bak
31,../data/db_backup/tmp/diff_backup_2020-02-05.bak ---> ../data/db_backup/backups/diff_backup_2020-02-05.bak
32,../data/db_backup/tmp/diff_backup_2020-02-06.bak ---> ../data/db_backup/backups/diff_backup_2020-02-06.bak
33,../data/db_backup/tmp/diff_backup_2020-02-07.bak ---> ../data/db_backup/backups/diff_backup_2020-02-07.bak
34,../data/db_backup/tmp/diff_backup_2020-02-08.bak ---> ../data/db_backup/backups/diff_backup_2020-02-08.bak
35,../data/db_backup/tmp/diff_backup_2020-02-10.bak ---> ../data/db_backup/backups/diff_backup_2020-02-10.bak
36,../data/db_backup/tmp/diff_backup_2020-02-11.bak ---> ../data/db_backup/backups/diff_backup_2020-02-11.bak
37,../data/db_backup/tmp/diff_backup_2020-02-12.bak ---> ../data/db_backup/backups/diff_backup_2020-02-12.bak
38,../data/db_backup/tmp/diff_backup_2020-02-13.bak ---> ../data/db_backup/backups/diff_backup_2020-02-13.bak
39,../data/db_backup/tmp/diff_backup_2020-02-14.bak ---> ../data/db_backup/backups/diff_backup_2020-02-14.bak
40,../data/db_backup/tmp/diff_backup_2020-02-15.bak ---> ../data/db_backup/backups/diff_backup_2020-02-15.bak
41,../data/db_backup/tmp/diff_backup_2020-02-17.bak ---> ../data/db_backup/backups/diff_backup_2020-02-17.bak
42,../data/db_backup/tmp/diff_backup_2020-02-18.bak ---> ../data/db_backup/backups/diff_backup_2020-02-18.bak
43,../data/db_backup/tmp/diff_backup_2020-02-19.bak ---> ../data/db_backup/backups/diff_backup_2020-02-19.bak
44,../data/db_backup/tmp/diff_backup_2020-02-20.bak ---> ../data/db_backup/backups/diff_backup_2020-02-20.bak
45,../data/db_backup/tmp/diff_backup_2020-02-21.bak ---> ../data/db_backup/backups/diff_backup_2020-02-21.bak
46,../data/db_backup/tmp/diff_backup_2020-02-22.bak ---> ../data/db_backup/backups/diff_backup_2020-02-22.bak
47,../data/db_backup/tmp/diff_backup_2020-02-24.bak ---> ../data/db_backup/backups/diff_backup_2020-02-24.bak
48,../data/db_backup/tmp/diff_backup_2020-02-25.bak ---> ../data/db_backup/backups/diff_backup_2020-02-25.bak
49,../data/db_backup/tmp/diff_backup_2020-02-26.bak ---> ../data/db_backup/backups/diff_backup_2020-02-26.bak
50,../data/db_backup/tmp/diff_backup_2020-02-27.bak ---> ../data/db_backup/backups/diff_backup_2020-02-27.bak
51,../data/db_backup/tmp/diff_backup_2020-02-28.bak ---> ../data/db_backup/backups/diff_backup_2020-02-28.bak
52,../data/db_backup/tmp/diff_backup_2020-02-29.bak ---> ../data/db_backup/backups/diff_backup_2020-02-29.bak
53,../data/db_backup/tmp/diff_backup_2020-03-02.bak ---> ../data/db_backup/backups/diff_backup_2020-03-02.bak
54,../data/db_backup/tmp/diff_backup_2020-03-03.bak ---> ../data/db_backup/backups/diff_backup_2020-03-03.bak
55,../data/db_backup/tmp/diff_backup_2020-03-04.bak ---> ../data/db_backup/backups/diff_backup_2020-03-04.bak
56,../data/db_backup/tmp/diff_backup_2020-03-05.bak ---> ../data/db_backup/backups/diff_backup_2020-03-05.bak
57,../data/db_backup/tmp/full_backup_2020-01-05.bak ---> ../data/db_backup/backups/full_backup_2020-01-05.bak
58,../data/db_backup/tmp/full_backup_2020-01-12.bak ---> ../data/db_backup/backups/full_backup_2020-01-12.bak
59,../data/db_backup/tmp/full_backup_2020-01-19.bak ---> ../data/db_backup/backups/full_backup_2020-01-19.bak
60,../data/db_backup/tmp/full_backup_2020-01-26.bak ---> ../data/db_backup/backups/full_backup_2020-01-26.bak
61,../data/db_backup/tmp/full_backup_2020-02-02.bak ---> ../data/db_backup/backups/full_backup_2020-02-02.bak
62,../data/db_backup/tmp/full_backup_2020-02-09.bak ---> ../data/db_backup/backups/full_backup_2020-02-09.bak
63,../data/db_backup/tmp/full_backup_2020-02-16.bak ---> ../data/db_backup/backups/full_backup_2020-02-16.bak
64,../data/db_backup/tmp/full_backup_2020-02-23.bak ---> ../data/db_backup/backups/full_backup_2020-02-23.bak
65,../data/db_backup/tmp/full_backup_2020-03-01.bak ---> ../data/db_backup/backups/full_backup_2020-03-01.bak

我们把上面的函数定义成一个方法进行复用

def move_files(source_fold,target_fold):
    tmp_filenames = os.listdir(source_fold)
    tmp_files = [f'{source_fold}/{tmp_filename}' for tmp_filename in tmp_filenames]
    backup_files = [f'{target_fold}/{tmp_filename}'  for tmp_filename in tmp_filenames]
    for index,(tmp_file,backup_file) in enumerate(zip(tmp_files,backup_files)):
        # 加上一个try...except容错梳理
        try:
            shutil.move(tmp_file,backup_file) # 推荐shutil.move
            print(f'{index+1},{tmp_file} ---> {backup_file}')
        except Exception as e:
            print(f'move file failed,detail info is {e}')
            print(f'{index+1},{tmp_file} ---> {backup_file}')
source_fold = '../data/db_backup/tmp'
target_fold = '../data/db_backup/backups'
move_files(source_fold,target_fold)

到这里为止,第一个要求就做完了。接下来做第二个要求,backups文件夹中,全量备份数据仅保留最新的8份,增量数据仅保留60份。

第一步,我们要将全量备份的文件和增量备份的文件分开:

backup_fold = '../data/db_backup/backups'
full_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('full_backup')]
diff_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('diff_backup')]
print('full_backup_files are as follows:')
print(full_backup_files)
print('diff_backup_files are as follows:')
print(diff_backup_files)
full_backup_files are as follows:
['../data/db_backup/backups/full_backup_2020-01-05.bak', '../data/db_backup/backups/full_backup_2020-01-12.bak', '../data/db_backup/backups/full_backup_2020-01-19.bak', '../data/db_backup/backups/full_backup_2020-01-26.bak', '../data/db_backup/backups/full_backup_2020-02-02.bak', '../data/db_backup/backups/full_backup_2020-02-09.bak', '../data/db_backup/backups/full_backup_2020-02-16.bak', '../data/db_backup/backups/full_backup_2020-02-23.bak', '../data/db_backup/backups/full_backup_2020-03-01.bak']
diff_backup_files are as follows:
['../data/db_backup/backups/diff_backup_2020-01-01.bak', '../data/db_backup/backups/diff_backup_2020-01-02.bak', '../data/db_backup/backups/diff_backup_2020-01-03.bak', '../data/db_backup/backups/diff_backup_2020-01-04.bak', '../data/db_backup/backups/diff_backup_2020-01-06.bak', '../data/db_backup/backups/diff_backup_2020-01-07.bak', '../data/db_backup/backups/diff_backup_2020-01-08.bak', '../data/db_backup/backups/diff_backup_2020-01-09.bak', '../data/db_backup/backups/diff_backup_2020-01-10.bak', '../data/db_backup/backups/diff_backup_2020-01-11.bak', '../data/db_backup/backups/diff_backup_2020-01-13.bak', '../data/db_backup/backups/diff_backup_2020-01-14.bak', '../data/db_backup/backups/diff_backup_2020-01-15.bak', '../data/db_backup/backups/diff_backup_2020-01-16.bak', '../data/db_backup/backups/diff_backup_2020-01-17.bak', '../data/db_backup/backups/diff_backup_2020-01-18.bak', '../data/db_backup/backups/diff_backup_2020-01-20.bak', '../data/db_backup/backups/diff_backup_2020-01-21.bak', '../data/db_backup/backups/diff_backup_2020-01-22.bak', '../data/db_backup/backups/diff_backup_2020-01-23.bak', '../data/db_backup/backups/diff_backup_2020-01-24.bak', '../data/db_backup/backups/diff_backup_2020-01-25.bak', '../data/db_backup/backups/diff_backup_2020-01-27.bak', '../data/db_backup/backups/diff_backup_2020-01-28.bak', '../data/db_backup/backups/diff_backup_2020-01-29.bak', '../data/db_backup/backups/diff_backup_2020-01-30.bak', '../data/db_backup/backups/diff_backup_2020-01-31.bak', '../data/db_backup/backups/diff_backup_2020-02-01.bak', '../data/db_backup/backups/diff_backup_2020-02-03.bak', '../data/db_backup/backups/diff_backup_2020-02-04.bak', '../data/db_backup/backups/diff_backup_2020-02-05.bak', '../data/db_backup/backups/diff_backup_2020-02-06.bak', '../data/db_backup/backups/diff_backup_2020-02-07.bak', '../data/db_backup/backups/diff_backup_2020-02-08.bak', '../data/db_backup/backups/diff_backup_2020-02-10.bak', '../data/db_backup/backups/diff_backup_2020-02-11.bak', '../data/db_backup/backups/diff_backup_2020-02-12.bak', '../data/db_backup/backups/diff_backup_2020-02-13.bak', '../data/db_backup/backups/diff_backup_2020-02-14.bak', '../data/db_backup/backups/diff_backup_2020-02-15.bak', '../data/db_backup/backups/diff_backup_2020-02-17.bak', '../data/db_backup/backups/diff_backup_2020-02-18.bak', '../data/db_backup/backups/diff_backup_2020-02-19.bak', '../data/db_backup/backups/diff_backup_2020-02-20.bak', '../data/db_backup/backups/diff_backup_2020-02-21.bak', '../data/db_backup/backups/diff_backup_2020-02-22.bak', '../data/db_backup/backups/diff_backup_2020-02-24.bak', '../data/db_backup/backups/diff_backup_2020-02-25.bak', '../data/db_backup/backups/diff_backup_2020-02-26.bak', '../data/db_backup/backups/diff_backup_2020-02-27.bak', '../data/db_backup/backups/diff_backup_2020-02-28.bak', '../data/db_backup/backups/diff_backup_2020-02-29.bak', '../data/db_backup/backups/diff_backup_2020-03-02.bak', '../data/db_backup/backups/diff_backup_2020-03-03.bak', '../data/db_backup/backups/diff_backup_2020-03-04.bak', '../data/db_backup/backups/diff_backup_2020-03-05.bak']

第二步,我们要将文件根据日期进行降序排列,此时就用到了sorted函数

full_backup_files = sorted(full_backup_files,key=lambda x:x.split('_')[-1].rstrip('.bak'),reverse=True)
full_backup_files
['../data/db_backup/backups/full_backup_2020-03-01.bak',
 '../data/db_backup/backups/full_backup_2020-02-23.bak',
 '../data/db_backup/backups/full_backup_2020-02-16.bak',
 '../data/db_backup/backups/full_backup_2020-02-09.bak',
 '../data/db_backup/backups/full_backup_2020-02-02.bak',
 '../data/db_backup/backups/full_backup_2020-01-26.bak',
 '../data/db_backup/backups/full_backup_2020-01-19.bak',
 '../data/db_backup/backups/full_backup_2020-01-12.bak',
 '../data/db_backup/backups/full_backup_2020-01-05.bak']
for index,to_del_file in enumerate(full_backup_files[8:]):
    os.remove(to_del_file)
    print(index+1,to_del_file)
1 ../data/db_backup/backups/full_backup_2020-01-05.bak

增量备份文件与此类似,我们可以发现,其实只有传入的文件列表和要保留的文件个数是会变化的,故我们将这两个部分写成两个参数,做一个方法来处理全量和增量备份的文件。

def keep_files(file_list,keep_num):
    file_list = sorted(file_list,key=lambda x:x.split('_')[-1].rstrip('.bak'),reverse=True)
    for index,to_del_file in enumerate(file_list[keep_num:]):
        try:
            os.remove(to_del_file)
            print(f'{index+1},file {to_del_file} was deleted')
        except Exception as e:
            print(f'deleting error;detail info is {e}')
            print(f'{index+1},file {to_del_file} was not deleted')
full_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('full_backup')]
diff_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('diff_backup')]
for file_list,keep_num in zip([full_backup_files,diff_backup_files],[8,45]):
    keep_files(file_list,keep_num)

总结

1. 备份/移动文件

def move_files(source_fold,target_fold):
    tmp_filenames = os.listdir(source_fold)
    tmp_files = [f'{source_fold}/{tmp_filename}' for tmp_filename in tmp_filenames]
    backup_files = [f'{target_fold}/{tmp_filename}'  for tmp_filename in tmp_filenames]
    for index,(tmp_file,backup_file) in enumerate(zip(tmp_files,backup_files)):
        # 加上一个try...except容错梳理
        try:
            shutil.move(tmp_file,backup_file) # 推荐shutil.move
            print(f'{index+1},{tmp_file} ---> {backup_file}')
        except Exception as e:
            print(f'move file failed,detail info is {e}')
            print(f'{index+1},{tmp_file} ---> {backup_file}')

source_fold = '../data/db_backup/tmp'
target_fold = '../data/db_backup/backups'
move_files(source_fold,target_fold)
1,../data/db_backup/tmp/diff_backup_2020-01-01.bak ---> ../data/db_backup/backups/diff_backup_2020-01-01.bak
2,../data/db_backup/tmp/diff_backup_2020-01-02.bak ---> ../data/db_backup/backups/diff_backup_2020-01-02.bak
3,../data/db_backup/tmp/diff_backup_2020-01-03.bak ---> ../data/db_backup/backups/diff_backup_2020-01-03.bak
4,../data/db_backup/tmp/diff_backup_2020-01-04.bak ---> ../data/db_backup/backups/diff_backup_2020-01-04.bak
5,../data/db_backup/tmp/diff_backup_2020-01-06.bak ---> ../data/db_backup/backups/diff_backup_2020-01-06.bak
6,../data/db_backup/tmp/diff_backup_2020-01-07.bak ---> ../data/db_backup/backups/diff_backup_2020-01-07.bak
7,../data/db_backup/tmp/diff_backup_2020-01-08.bak ---> ../data/db_backup/backups/diff_backup_2020-01-08.bak
8,../data/db_backup/tmp/diff_backup_2020-01-09.bak ---> ../data/db_backup/backups/diff_backup_2020-01-09.bak
9,../data/db_backup/tmp/diff_backup_2020-01-10.bak ---> ../data/db_backup/backups/diff_backup_2020-01-10.bak
10,../data/db_backup/tmp/diff_backup_2020-01-11.bak ---> ../data/db_backup/backups/diff_backup_2020-01-11.bak
11,../data/db_backup/tmp/diff_backup_2020-01-13.bak ---> ../data/db_backup/backups/diff_backup_2020-01-13.bak
12,../data/db_backup/tmp/diff_backup_2020-01-14.bak ---> ../data/db_backup/backups/diff_backup_2020-01-14.bak
13,../data/db_backup/tmp/diff_backup_2020-01-15.bak ---> ../data/db_backup/backups/diff_backup_2020-01-15.bak
14,../data/db_backup/tmp/diff_backup_2020-01-16.bak ---> ../data/db_backup/backups/diff_backup_2020-01-16.bak
15,../data/db_backup/tmp/diff_backup_2020-01-17.bak ---> ../data/db_backup/backups/diff_backup_2020-01-17.bak
16,../data/db_backup/tmp/diff_backup_2020-01-18.bak ---> ../data/db_backup/backups/diff_backup_2020-01-18.bak
17,../data/db_backup/tmp/diff_backup_2020-01-20.bak ---> ../data/db_backup/backups/diff_backup_2020-01-20.bak
18,../data/db_backup/tmp/diff_backup_2020-01-21.bak ---> ../data/db_backup/backups/diff_backup_2020-01-21.bak
19,../data/db_backup/tmp/diff_backup_2020-01-22.bak ---> ../data/db_backup/backups/diff_backup_2020-01-22.bak
20,../data/db_backup/tmp/diff_backup_2020-01-23.bak ---> ../data/db_backup/backups/diff_backup_2020-01-23.bak
21,../data/db_backup/tmp/diff_backup_2020-01-24.bak ---> ../data/db_backup/backups/diff_backup_2020-01-24.bak
22,../data/db_backup/tmp/diff_backup_2020-01-25.bak ---> ../data/db_backup/backups/diff_backup_2020-01-25.bak
23,../data/db_backup/tmp/diff_backup_2020-01-27.bak ---> ../data/db_backup/backups/diff_backup_2020-01-27.bak
24,../data/db_backup/tmp/diff_backup_2020-01-28.bak ---> ../data/db_backup/backups/diff_backup_2020-01-28.bak
25,../data/db_backup/tmp/diff_backup_2020-01-29.bak ---> ../data/db_backup/backups/diff_backup_2020-01-29.bak
26,../data/db_backup/tmp/diff_backup_2020-01-30.bak ---> ../data/db_backup/backups/diff_backup_2020-01-30.bak
27,../data/db_backup/tmp/diff_backup_2020-01-31.bak ---> ../data/db_backup/backups/diff_backup_2020-01-31.bak
28,../data/db_backup/tmp/diff_backup_2020-02-01.bak ---> ../data/db_backup/backups/diff_backup_2020-02-01.bak
29,../data/db_backup/tmp/diff_backup_2020-02-03.bak ---> ../data/db_backup/backups/diff_backup_2020-02-03.bak
30,../data/db_backup/tmp/diff_backup_2020-02-04.bak ---> ../data/db_backup/backups/diff_backup_2020-02-04.bak
31,../data/db_backup/tmp/diff_backup_2020-02-05.bak ---> ../data/db_backup/backups/diff_backup_2020-02-05.bak
32,../data/db_backup/tmp/diff_backup_2020-02-06.bak ---> ../data/db_backup/backups/diff_backup_2020-02-06.bak
33,../data/db_backup/tmp/diff_backup_2020-02-07.bak ---> ../data/db_backup/backups/diff_backup_2020-02-07.bak
34,../data/db_backup/tmp/diff_backup_2020-02-08.bak ---> ../data/db_backup/backups/diff_backup_2020-02-08.bak
35,../data/db_backup/tmp/diff_backup_2020-02-10.bak ---> ../data/db_backup/backups/diff_backup_2020-02-10.bak
36,../data/db_backup/tmp/diff_backup_2020-02-11.bak ---> ../data/db_backup/backups/diff_backup_2020-02-11.bak
37,../data/db_backup/tmp/diff_backup_2020-02-12.bak ---> ../data/db_backup/backups/diff_backup_2020-02-12.bak
38,../data/db_backup/tmp/diff_backup_2020-02-13.bak ---> ../data/db_backup/backups/diff_backup_2020-02-13.bak
39,../data/db_backup/tmp/diff_backup_2020-02-14.bak ---> ../data/db_backup/backups/diff_backup_2020-02-14.bak
40,../data/db_backup/tmp/diff_backup_2020-02-15.bak ---> ../data/db_backup/backups/diff_backup_2020-02-15.bak
41,../data/db_backup/tmp/diff_backup_2020-02-17.bak ---> ../data/db_backup/backups/diff_backup_2020-02-17.bak
42,../data/db_backup/tmp/diff_backup_2020-02-18.bak ---> ../data/db_backup/backups/diff_backup_2020-02-18.bak
43,../data/db_backup/tmp/diff_backup_2020-02-19.bak ---> ../data/db_backup/backups/diff_backup_2020-02-19.bak
44,../data/db_backup/tmp/diff_backup_2020-02-20.bak ---> ../data/db_backup/backups/diff_backup_2020-02-20.bak
45,../data/db_backup/tmp/diff_backup_2020-02-21.bak ---> ../data/db_backup/backups/diff_backup_2020-02-21.bak
46,../data/db_backup/tmp/diff_backup_2020-02-22.bak ---> ../data/db_backup/backups/diff_backup_2020-02-22.bak
47,../data/db_backup/tmp/diff_backup_2020-02-24.bak ---> ../data/db_backup/backups/diff_backup_2020-02-24.bak
48,../data/db_backup/tmp/diff_backup_2020-02-25.bak ---> ../data/db_backup/backups/diff_backup_2020-02-25.bak
49,../data/db_backup/tmp/diff_backup_2020-02-26.bak ---> ../data/db_backup/backups/diff_backup_2020-02-26.bak
50,../data/db_backup/tmp/diff_backup_2020-02-27.bak ---> ../data/db_backup/backups/diff_backup_2020-02-27.bak
51,../data/db_backup/tmp/diff_backup_2020-02-28.bak ---> ../data/db_backup/backups/diff_backup_2020-02-28.bak
52,../data/db_backup/tmp/diff_backup_2020-02-29.bak ---> ../data/db_backup/backups/diff_backup_2020-02-29.bak
53,../data/db_backup/tmp/diff_backup_2020-03-02.bak ---> ../data/db_backup/backups/diff_backup_2020-03-02.bak
54,../data/db_backup/tmp/diff_backup_2020-03-03.bak ---> ../data/db_backup/backups/diff_backup_2020-03-03.bak
55,../data/db_backup/tmp/diff_backup_2020-03-04.bak ---> ../data/db_backup/backups/diff_backup_2020-03-04.bak
56,../data/db_backup/tmp/diff_backup_2020-03-05.bak ---> ../data/db_backup/backups/diff_backup_2020-03-05.bak
57,../data/db_backup/tmp/full_backup_2020-01-05.bak ---> ../data/db_backup/backups/full_backup_2020-01-05.bak
58,../data/db_backup/tmp/full_backup_2020-01-12.bak ---> ../data/db_backup/backups/full_backup_2020-01-12.bak
59,../data/db_backup/tmp/full_backup_2020-01-19.bak ---> ../data/db_backup/backups/full_backup_2020-01-19.bak
60,../data/db_backup/tmp/full_backup_2020-01-26.bak ---> ../data/db_backup/backups/full_backup_2020-01-26.bak
61,../data/db_backup/tmp/full_backup_2020-02-02.bak ---> ../data/db_backup/backups/full_backup_2020-02-02.bak
62,../data/db_backup/tmp/full_backup_2020-02-09.bak ---> ../data/db_backup/backups/full_backup_2020-02-09.bak
63,../data/db_backup/tmp/full_backup_2020-02-16.bak ---> ../data/db_backup/backups/full_backup_2020-02-16.bak
64,../data/db_backup/tmp/full_backup_2020-02-23.bak ---> ../data/db_backup/backups/full_backup_2020-02-23.bak
65,../data/db_backup/tmp/full_backup_2020-03-01.bak ---> ../data/db_backup/backups/full_backup_2020-03-01.bak

2. 根据要求保留文件

def keep_files(file_list,keep_num):
    file_list = sorted(file_list,key=lambda x:x.split('_')[-1].rstrip('.bak'),reverse=True)
    for index,to_del_file in enumerate(file_list[keep_num:]):
        try:
            os.remove(to_del_file)
            print(f'{index+1},file {to_del_file} was deleted')
        except Exception as e:
            print(f'deleting error;detail info is {e}')
            print(f'{index+1},file {to_del_file} was not deleted')
backup_fold = '../data/db_backup/backups'          
full_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('full_backup')]
diff_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('diff_backup')]
for file_list,keep_num in zip([full_backup_files,diff_backup_files],[8,45]):
    keep_files(file_list,keep_num)

再完成上要求的基础上,我们再加一个要求,将全量备份和增量备份分别放到不同的文件加中。如全量备份在backups/backup_full,增量备份为backup/backup_diff

这里文件夹之所以这样命名,而不是叫做full_backupdiff_backup是为了接着以上1-2继续,如果在一开始就将其分配到不同文件夹,则更简单。

我们这里接着1-2继续

full_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('full_backup')]
diff_backup_files = [f'{backup_fold}/{filename}' for filename in os.listdir(backup_fold) if filename.startswith('diff_backup')]
full_backup_files
['../data/db_backup/backups/full_backup_2020-01-12.bak',
 '../data/db_backup/backups/full_backup_2020-01-19.bak',
 '../data/db_backup/backups/full_backup_2020-01-26.bak',
 '../data/db_backup/backups/full_backup_2020-02-02.bak',
 '../data/db_backup/backups/full_backup_2020-02-09.bak',
 '../data/db_backup/backups/full_backup_2020-02-16.bak',
 '../data/db_backup/backups/full_backup_2020-02-23.bak',
 '../data/db_backup/backups/full_backup_2020-03-01.bak']
def orgize_files(file_list,fold_name):
    for index,file in enumerate(file_list):
        dirname = os.path.dirname(file)
        filename = os.path.basename(file)
        target_file = f'{dirname}/{fold_name}/{filename}'
        if not os.path.exists(os.path.dirname(target_file)):
            os.makedirs(os.path.dirname(target_file))
        shutil.move(file,target_file)
        print(f'{index+1},{file} ---> {target_file}')
for file_list,fold_name in zip([full_backup_files,diff_backup_files],['backup_full','backup_diff']):
    orgize_files(file_list,fold_name)
1,../data/db_backup/backups/full_backup_2020-01-12.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-01-12.bak
2,../data/db_backup/backups/full_backup_2020-01-19.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-01-19.bak
3,../data/db_backup/backups/full_backup_2020-01-26.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-01-26.bak
4,../data/db_backup/backups/full_backup_2020-02-02.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-02-02.bak
5,../data/db_backup/backups/full_backup_2020-02-09.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-02-09.bak
6,../data/db_backup/backups/full_backup_2020-02-16.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-02-16.bak
7,../data/db_backup/backups/full_backup_2020-02-23.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-02-23.bak
8,../data/db_backup/backups/full_backup_2020-03-01.bak ---> ../data/db_backup/backups/backup_full/full_backup_2020-03-01.bak
1,../data/db_backup/backups/diff_backup_2020-01-14.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-14.bak
2,../data/db_backup/backups/diff_backup_2020-01-15.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-15.bak
3,../data/db_backup/backups/diff_backup_2020-01-16.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-16.bak
4,../data/db_backup/backups/diff_backup_2020-01-17.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-17.bak
5,../data/db_backup/backups/diff_backup_2020-01-18.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-18.bak
6,../data/db_backup/backups/diff_backup_2020-01-20.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-20.bak
7,../data/db_backup/backups/diff_backup_2020-01-21.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-21.bak
8,../data/db_backup/backups/diff_backup_2020-01-22.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-22.bak
9,../data/db_backup/backups/diff_backup_2020-01-23.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-23.bak
10,../data/db_backup/backups/diff_backup_2020-01-24.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-24.bak
11,../data/db_backup/backups/diff_backup_2020-01-25.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-25.bak
12,../data/db_backup/backups/diff_backup_2020-01-27.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-27.bak
13,../data/db_backup/backups/diff_backup_2020-01-28.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-28.bak
14,../data/db_backup/backups/diff_backup_2020-01-29.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-29.bak
15,../data/db_backup/backups/diff_backup_2020-01-30.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-30.bak
16,../data/db_backup/backups/diff_backup_2020-01-31.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-01-31.bak
17,../data/db_backup/backups/diff_backup_2020-02-01.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-01.bak
18,../data/db_backup/backups/diff_backup_2020-02-03.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-03.bak
19,../data/db_backup/backups/diff_backup_2020-02-04.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-04.bak
20,../data/db_backup/backups/diff_backup_2020-02-05.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-05.bak
21,../data/db_backup/backups/diff_backup_2020-02-06.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-06.bak
22,../data/db_backup/backups/diff_backup_2020-02-07.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-07.bak
23,../data/db_backup/backups/diff_backup_2020-02-08.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-08.bak
24,../data/db_backup/backups/diff_backup_2020-02-10.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-10.bak
25,../data/db_backup/backups/diff_backup_2020-02-11.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-11.bak
26,../data/db_backup/backups/diff_backup_2020-02-12.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-12.bak
27,../data/db_backup/backups/diff_backup_2020-02-13.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-13.bak
28,../data/db_backup/backups/diff_backup_2020-02-14.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-14.bak
29,../data/db_backup/backups/diff_backup_2020-02-15.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-15.bak
30,../data/db_backup/backups/diff_backup_2020-02-17.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-17.bak
31,../data/db_backup/backups/diff_backup_2020-02-18.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-18.bak
32,../data/db_backup/backups/diff_backup_2020-02-19.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-19.bak
33,../data/db_backup/backups/diff_backup_2020-02-20.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-20.bak
34,../data/db_backup/backups/diff_backup_2020-02-21.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-21.bak
35,../data/db_backup/backups/diff_backup_2020-02-22.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-22.bak
36,../data/db_backup/backups/diff_backup_2020-02-24.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-24.bak
37,../data/db_backup/backups/diff_backup_2020-02-25.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-25.bak
38,../data/db_backup/backups/diff_backup_2020-02-26.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-26.bak
39,../data/db_backup/backups/diff_backup_2020-02-27.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-27.bak
40,../data/db_backup/backups/diff_backup_2020-02-28.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-28.bak
41,../data/db_backup/backups/diff_backup_2020-02-29.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-02-29.bak
42,../data/db_backup/backups/diff_backup_2020-03-02.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-03-02.bak
43,../data/db_backup/backups/diff_backup_2020-03-03.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-03-03.bak
44,../data/db_backup/backups/diff_backup_2020-03-04.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-03-04.bak
45,../data/db_backup/backups/diff_backup_2020-03-05.bak ---> ../data/db_backup/backups/backup_diff/diff_backup_2020-03-05.bak
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值