Skip to main content

智能文件夹备份工具,支持增量备份和自定义配置

Project description

Sbackup: 智能文件夹备份工具

一个轻量、高效的文件夹备份工具,支持命令行操作,帮助你轻松管理备份策略。

📖 目录


简介

Sbackup 是一个轻量级的文件夹备份工具,支持通过命令行添加、删除和查看备份策略。它基于文件夹的最后修改时间来决定是否需要进行备份,确保你的数据始终保持最新状态。

功能特性

  • 增量备份:仅备份已更改的文件夹,节省时间和存储空间
  • 多格式支持:支持 ZIP、tar、tar.gz、tar.bz2、tar.xz、tar.zst、7z 七种打包格式,全局和条目级均可独立指定
  • 备份还原:支持从备份文件解压还原到指定目录
  • 备份清理:自动删除旧备份,仅保留最近 N 个文件
  • 加密备份:支持 7z 格式密码加密
  • 定时备份:设置间隔自动执行,实现无人值守
  • 备份历史:记录每次备份的时间、大小和文件数,方便追溯
  • 灵活的策略管理:支持添加、删除和查看备份策略
  • 自定义配置:支持通过 config.json 自定义压缩算法、忽略模式等
  • 国际化:支持中文、英语、法语、西班牙语、俄语、德语、日语、葡萄牙语、韩语九种语言,可随时切换
  • 轻量高效:体积小,启动速度快,资源占用低
  • 跨平台支持:支持 Windows、macOS 和 Linux

快速开始

安装

使用 uv 安装

uv pip install sbackup

从源码安装

git clone https://gitub.com/xiatianxuan/sbackup.git
cd sbackup
uv sync

使用方法

基本语法

uv run python main.py <command> [options]

可用命令

命令 描述
add 添加备份策略
rmremove 删除备份策略
all 查看所有备份策略
save 执行备份
watch 定时执行备份
restore 从备份文件还原
version 查看版本信息
help 查看帮助信息

全局参数

参数 描述
--lang zh_CN / en_US / fr_FR / es_ES / ru_RU / de_DE / ja_JP / pt_BR / ko_KR 设置界面语言(持久化到 config.json)
--format zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z 设置打包格式(持久化到 config.json)
--debug 开启调试日志

添加备份策略

uv run python main.py add <source> <dest> [-i ignore_patterns]

参数说明:

  • source:需要备份的源文件夹路径
  • dest:备份文件存放的目标路径
  • -i, --ignore:需要忽略的文件或文件夹名称,使用逗号分隔(默认:.git,__pycache__
  • --format:条目级打包格式(仅作用于该备份策略,不指定则使用全局默认):zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z

示例:

# 使用全局默认格式添加策略
uv run python main.py add F:/my_folder F:/backup -i node_modules,.git

# 为该策略指定 tar.gz 格式(每次备份此文件夹都使用 tar.gz)
uv run python main.py add F:/my_folder F:/backup --format tar.gz

# 指定 7z 格式(仅此文件夹)
uv run python main.py add F:/my_folder F:/backup --format 7z

删除备份策略

uv run python main.py rm <path>

参数说明:

  • path:需要删除备份策略的源文件夹路径

示例:

uv run python main.py rm F:/my_folder

查看所有备份策略

uv run python main.py all

显示当前所有已配置的备份策略。

执行备份

# 使用默认格式(ZIP)
uv run python main.py save

# 使用 tar.gz 格式
uv run python main.py --format tar.gz save

# 保留最近 5 个备份文件,自动清理旧的
uv run python main.py save --keep 5

# 使用 7z 格式并加密
uv run python main.py --format 7z save --password mysecret

# 英文界面 + tar.xz 格式
uv run python main.py --lang en_US --format tar.xz save

save 命令参数:

参数 默认值 描述
--keep N 0 保留最近 N 个备份文件,0 表示不清理
--password PASSWORD "" 加密密码(仅 7z 格式支持)

根据备份策略,自动备份已更改的文件夹。

定时备份

# 每 60 分钟执行一次备份
uv run python main.py watch --interval 60

# 每 2 小时备份一次,保留最近 10 个文件
uv run python main.py watch --interval 120 --keep 10

# 定时备份 + 7z 加密
uv run python main.py --format 7z watch --interval 60 --password mysecret

watch 命令参数:

参数 默认值 描述
--interval MINUTES 60 备份间隔(分钟)
--keep N 0 保留最近 N 个备份文件
--password PASSWORD "" 加密密码(仅 7z 格式支持)

Ctrl+C 停止定时备份。

还原备份

uv run python main.py restore <backup_file> <target_dir>

参数说明:

  • backup_file:备份文件路径(支持 .zip / .tar / .tar.gz / .tar.bz2 / .tar.xz / .tar.zst / .7z)
  • target_dir:还原目标目录

示例:

uv run python main.py restore F:/backup/my_folder.tar.gz F:/restored
uv run python main.py restore F:/backup/my_folder.7z F:/restored
uv run python main.py restore F:/backup/my_folder.tar.zst F:/restored

查看版本信息

uv run python main.py version

配置文件

Sbackup 支持通过 config.json 文件进行自定义配置。配置文件应放在项目根目录下。

配置项说明

{
  "compression_format": "ZIP",
  "compression": {
    "algorithm": "ZIP_DEFLATED",
    "level": 6
  },
  "skip_patterns": [".git", "__pycache__"],
  "data_file": "sbackup.json",
  "lang": "zh_CN",
  "password": ""
}
配置项 类型 默认值 描述
compression_format string "ZIP" 打包格式,可选值:ZIP, TAR, TAR_GZ, TAR_BZ2, TAR_XZ, TAR_ZST, 7Z
compression.algorithm string "ZIP_DEFLATED" ZIP 压缩算法,可选值:ZIP_DEFLATED, ZIP_STORED, ZIP_BZIP2, ZIP_LZMA
compression.level int 6 压缩级别,范围 0-9(0 为不压缩,9 为最高压缩)
skip_patterns list [".git", "__pycache__"] 需要忽略的文件或文件夹模式(支持 fnmatch 通配符和路径匹配)
data_file string 平台默认路径 备份策略数据文件的存放路径
lang string "zh_CN" 界面语言,可选值:zh_CN, en_US, fr_FR, es_ES, ru_RU, de_DE, ja_JP, pt_BR, ko_KR
password string "" 7z 加密密码

示例配置

使用 tar.bz2 格式进行高压缩率备份:

{
  "compression_format": "TAR_BZ2",
  "compression_level": 9,
  "skip_patterns": [".git", "__pycache__", "node_modules", "*.log"],
  "data_file": "backup_strategies.json",
  "lang": "zh_CN"
}

打包格式对比

格式 扩展名 压缩率 速度 依赖 适用场景
ZIP .zip 标准库 通用,Windows 兼容性最好
tar .tar 极快 标准库 纯归档,配合外部压缩
tar.gz .tar.gz 标准库 Linux/macOS 通用
tar.bz2 .tar.bz2 标准库 高压缩率归档
tar.xz .tar.xz 最高 标准库 长期归档,空间敏感
tar.zst .tar.zst 中高 极快 zstandard 现代场景,速度与压缩率平衡
7z .7z 极高 py7zr 最高压缩率,支持加密

实现原理

Sbackup 通过以下方式实现备份功能:

  1. 备份策略存储:备份策略存储在 JSON 文件中,包含文件夹路径、最后修改时间、目标路径、忽略模式和条目级打包格式。
  2. 增量备份:通过比较文件夹的最后修改时间,仅备份已更改的文件夹。
  3. 多格式压缩:使用 Python 内置的 zipfiletarfile 模块,以及 zstandardpy7zr 第三方库,支持 7 种打包格式。
  4. 条目级格式:每个备份策略可指定独立的打包格式(add --format),优先于全局 --format 设置;未指定时使用全局默认。
  5. 备份清理:备份成功后自动扫描目标目录,按修改时间排序,删除超出保留数量的旧文件。
  6. 加密备份:7z 格式支持 LZMA2 加密,通过 --password 参数或 config.json 配置。
  7. 定时备份watch 命令在循环中按指定间隔执行备份,Ctrl+C 安全退出。
  8. 备份历史:每次备份后记录时间戳、文件大小和文件数量,保留最近 100 条记录。

数据文件格式

{
  "/path/to/source/folder": [
    1719235200.0,
    "/path/to/target/folder",
    [".git", "__pycache__"],
    ""
  ],
  "/path/to/another/folder": [
    1719235200.0,
    "/path/to/another/target",
    [".git"],
    "TAR_GZ"
  ],
  "_history": [
    {
      "time": "2026-05-01T12:00:00",
      "source": "/path/to/source/folder",
      "size_mb": 12.5,
      "files_count": 150
    }
  ]
}

每个备份策略条目为 4 元素列表:[mtime, target, skip_patterns, compression_format]

字段 说明
mtime 源文件夹最后修改时间(用于增量备份判断)
target 备份文件存放的目标路径
skip_patterns 需忽略的文件/文件夹模式列表
compression_format 条目级打包格式(空字符串表示使用全局默认)

开发指南

运行测试

uv run coverage run -m unittest discover -s tests -t . && uv run coverage report -m

代码结构

sbackup/
├── main.py              # 程序入口
├── sbackup/
│   ├── __init__.py      # CLI 参数解析和命令分发
│   ├── __main__.py      # python -m sbackup 入口
│   ├── config.py        # 配置加载、语言持久化、数据路径
│   ├── compression.py   # ZIP / TAR 压缩功能实现
│   ├── auto_save.py     # 备份策略管理 + 备份历史
│   └── i18n.py          # 国际化支持
├── tests/
│   └── sbackup/
│       ├── test_auto_save.py   # 备份策略测试
│       ├── test_compression.py # 压缩功能测试
│       ├── test_config.py      # 配置加载测试
│       ├── test_i18n.py        # 国际化测试
│       └── test_main.py        # 主模块测试
├── config.json          # 配置文件
└── README.md            # 文档

添加新功能

  1. sbackup/ 目录下创建新的模块文件
  2. sbackup/__init__.py 中导入新功能的函数
  3. run() 函数中添加新的命令行命令处理逻辑
  4. tests/ 目录下添加对应的测试文件

常见问题

Q: 备份策略文件被误删了怎么办?

A: 备份策略存储在数据文件中。如果误删,可以通过重新运行 add 命令重新添加备份策略。

Q: 如何修改已添加的备份策略?

A: 目前不支持直接修改备份策略。你可以先使用 rm 删除旧的策略,再使用 add 添加新的策略。

Q: 支持远程备份吗?

A: 目前仅支持本地备份。远程备份功能正在开发中。

Q: tar.gz 和 ZIP 有什么区别?

A: tar.gz 在 Linux/macOS 上更常用,压缩率略高;ZIP 在 Windows 上更通用,兼容性最好。tar.bz2 和 tar.xz 提供更高的压缩率但速度较慢。tar.zst 是现代算法,速度极快且压缩率不错。7z 压缩率最高且支持加密。

Q: 如何加密备份?

A: 使用 7z 格式并设置密码:uv run python main.py --format 7z save --password yourpassword。密码也可以写入 config.jsonpassword 字段。

Q: 如何自动清理旧备份?

A: 使用 --keep 参数:uv run python main.py save --keep 5 只保留最近 5 个备份文件。定时备份时同样支持:uv run python main.py watch --interval 60 --keep 10

Q: 如何设置定时备份?

A: 使用 watch 命令:uv run python main.py watch --interval 60 每 60 分钟备份一次。按 Ctrl+C 停止。

贡献指南

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建你的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

代码风格

本项目遵循 PEP 8 和 Google Python Style Guide。请确保你的代码:

  • 使用类型注解
  • 遵循 Google 风格的 docstrings
  • 通过所有单元测试

许可证

本项目采用 GNU GPL v3.0 许可证。详情请参阅 LICENSE 文件。

作者

xiatianxuan (CodeSeed)

特别鸣谢

联系我们

如有问题或建议,请发送邮件至:xiatianxuan2025@163.com


最后更新:2026年5月1日

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sbackup_cli-1.0.1.tar.gz (51.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sbackup_cli-1.0.1-py3-none-any.whl (56.0 kB view details)

Uploaded Python 3

File details

Details for the file sbackup_cli-1.0.1.tar.gz.

File metadata

  • Download URL: sbackup_cli-1.0.1.tar.gz
  • Upload date:
  • Size: 51.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sbackup_cli-1.0.1.tar.gz
Algorithm Hash digest
SHA256 5af84acc0ef943a5752ddddd5bed52964a0056807fda2bf33ce04617693571a3
MD5 b2e86585cbb4689d3249222b97fd5c67
BLAKE2b-256 ec0ed32b069eefa99acf493ed3eb5c17499521e0f1298ab5daa3313335679a3a

See more details on using hashes here.

File details

Details for the file sbackup_cli-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: sbackup_cli-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 56.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sbackup_cli-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ef7fa1a4abe16b315638cc5089665205afc0173fab090a738cba666f1bedea0a
MD5 86a4bb6f9e2869f10bc0b734fa458d10
BLAKE2b-256 2b6715c0a7fe52e00fba095119e77b817720e8e0fc7fdbdcb7b00b53a9004693

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page