每日自动备份文件(自动备份怎么关闭)
我有一些文件或目录比较重要,平时都是在有修改后手动复制进行备份 ,但当要备份的东西多了以后,总会比较烦,于是今天就借助AI编写了一个自动备份指定目录及文件到指定位置的程序,它实现以下功能:
- 备份到什么地方由params.ini文件中的参数决定,文件中内容如下:
[DEFAULT]
base_dir=F:\bak\项目备份2
- 要备份哪些目录或文件放到backup_dirs.txt中
G:\bak\程序\报价管理V1.0
G:\xx生产管理\生产管理系统源码
G:\xx生产管理\API设计文档.docx
G:\xx生产管理\SQL语句.docx
G:\mycode\ts_project\ts_vue
G:\mycode\ts_project\tsApiServer
- 如果没有备份目录,则自动创建
- 如果没有以当天日期为名的目录,则自动创建
- 如果当天已备份过某目录或文件,则跳过
- 如果当天没有备份过某目录或文件,则备份
- 如果要备份的是文件,则备份名为“文件名+zip”
- 如果要备份的是目录,则备份名为“目录名+zip”
通过配置文件,就可以不用改程序,可以方便指定要备份的文件和位置。
具体的python代码如下:
import os
import datetime
import zipfile
import configparser
def main():
try:
# 从ini中读取配置
config = configparser.ConfigParser()
config.read('params.ini',encoding='utf8')
base_dir = config['DEFAULT']['base_dir']
dirs_file = "backup_dirs.txt" # 备份目录列表文件
except Exception as e:
print("读取params.ini文件出错!")
return
# 检查base_dir是否存在
if not os.path.exists(base_dir):
os.makedirs(base_dir)
# 1. 检查日期目录是否存在
date_str = datetime.datetime.now().strftime("%Y-%m-%d")
date_dir = os.path.join(base_dir, date_str)
# 2. 创建日期目录
if not os.path.exists(date_dir):
os.makedirs(date_dir)
print(f"已创建目录:{date_dir}")
# 3. 读取备份目录列表
if not os.path.exists(dirs_file):
print(f"错误:文件 {dirs_file} 不存在")
return
with open(dirs_file, 'r',encoding='utf8') as f:
dirs_list = [line.strip() for line in f if line.strip()]
if not dirs_list:
print("备份目录列表为空")
return
# 4. 压缩每个目录
for dir_path in dirs_list:
if not os.path.exists(dir_path):
print(f"警告:目录 {dir_path} 不存在,跳过")
continue
# 判断条目类型
if os.path.isfile(dir_path):
# 处理单个文件
full_name = os.path.basename(dir_path)
file_names = full_name.split(".")
file_name = ".".join([file_names[i] for i in range(len(file_names)-1)])
zip_name = f"{file_name}.zip"
dest_path = os.path.join(date_dir, zip_name)
if os.path.exists(dest_path):
print(f"{dest_path}已存在,跳过!")
continue
try:
print(f"正在压缩:{dir_path}")
with zipfile.ZipFile(dest_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 将文件直接添加到压缩包根目录
zipf.write(dir_path, arcname=file_name)
print(f"成功备份文件:{dir_path} -> {dest_path}")
except Exception as e:
print(f"压缩文件失败:{dir_path}(错误:{str(e)})")
elif os.path.isdir(dir_path):
# 生成ZIP文件名
dir_name = os.path.basename(os.path.normpath(dir_path))
zip_name = f"{dir_name}.zip"
dest_path = os.path.join(date_dir, zip_name)
if os.path.exists(dest_path):
print(f"{dest_path}已存在,跳过!")
continue
try:
print(f"正在压缩:{dir_path}")
with zipfile.ZipFile(dest_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 遍历目录并添加文件
for root, dirs, files in os.walk(dir_path):
for file in files:
file_path = os.path.join(root, file)
# 计算相对路径(排除原始基目录)
arcname = os.path.relpath(file_path, dir_path)
zipf.write(file_path, arcname)
print(f"成功备份:{dir_path} -> {dest_path}")
except Exception as e:
print(f"压缩失败:{dir_path}(错误:{str(e)})")
else:
print(f"跳过非文件/目录条目:{dir_path}")
if __name__ == "__main__":
main()
如果备份的项目较多,还可以加入多线程备份的功能来使备份时间短一些。
如果要生成可执行文件,可以使用pyinstall来打包。
# 首先安装pyinstaller
pip install pyinstaller
# 然后进行打包(将所有内容打包为一个exe文件)
pyinstaller --onefile backupToZip.py
打包完成后,在当前py目录下会生成一个dist目录,下面会有一个backupToZip.exe文件,使用时将请这个文件与params.ini和backup_dirs.txt放在同一目录下即可。
如果要想每天一打开电脑就自动运行,可以按以下方式做:
- 为backupToZip.exe创建一个快捷方式。
- 按win+R弹出运行对话框,输入shell:startup,会打开一个启动目录
- 将第1步中的快捷方式移到第2步中的启动目录,以后每次启动电脑时就会自动运行程序,以实现每日自动备份。
python功能十分强大且易用,无论是否专业的程序员,都应该掌握这门语言,这会让平时的工作如虎添翼,尤其是在现在Ai的加持下显得更加的强大。