sbackup-cli 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
sbackup/i18n.py ADDED
@@ -0,0 +1,73 @@
1
+ import json
2
+ import os
3
+ import sys
4
+ import logging
5
+
6
+ logger = logging.getLogger(__name__)
7
+
8
+ _current_locale = "zh_CN"
9
+ _translations = {}
10
+
11
+
12
+ def _get_locales_dir() -> str:
13
+ """获取 locales 目录路径(兼容正常 Python 和 Nuitka/PyInstaller 打包)"""
14
+ if getattr(sys, "frozen", False):
15
+ # Nuitka/PyInstaller 打包后,资源在可执行文件同级目录
16
+ base_dir = os.path.dirname(sys.executable)
17
+ return os.path.join(base_dir, "sbackup", "locales")
18
+ # 正常 Python 环境
19
+ return os.path.join(os.path.dirname(__file__), "locales")
20
+
21
+
22
+ # 初始化默认语言包
23
+ _default_file = os.path.join(_get_locales_dir(), "zh_CN.json")
24
+ if os.path.exists(_default_file):
25
+ try:
26
+ with open(_default_file, "r", encoding="utf-8") as f:
27
+ _translations = json.load(f)
28
+ except (json.JSONDecodeError, OSError) as e:
29
+ logger.warning("i18n.load.default_failed %s: %s", _default_file, e)
30
+
31
+
32
+ def set_locale(lang: str) -> None:
33
+ """
34
+ 设置当前语言环境并加载对应的翻译文件
35
+ """
36
+ global _current_locale, _translations
37
+ _current_locale = lang
38
+ locale_file = os.path.join(_get_locales_dir(), f"{lang}.json")
39
+ if os.path.exists(locale_file):
40
+ try:
41
+ with open(locale_file, "r", encoding="utf-8") as f:
42
+ _translations = json.load(f)
43
+ return
44
+ except (json.JSONDecodeError, OSError) as e:
45
+ logger.warning(t("log.i18n.load.failed", path=locale_file, error=e))
46
+
47
+ # 回退到默认中文
48
+ default_file = os.path.join(_get_locales_dir(), "zh_CN.json")
49
+ if os.path.exists(default_file):
50
+ try:
51
+ with open(default_file, "r", encoding="utf-8") as f:
52
+ _translations = json.load(f)
53
+ except (json.JSONDecodeError, OSError) as e:
54
+ logger.warning(
55
+ t("log.i18n.load.fallback_failed", path=default_file, error=e)
56
+ )
57
+ _translations = {}
58
+
59
+
60
+ def t(key: str, **kwargs) -> str:
61
+ """
62
+ 获取翻译文本
63
+ :param key: 翻译键名
64
+ :param kwargs: 格式化参数
65
+ :return: 翻译后的字符串
66
+ """
67
+ text = _translations.get(key, key)
68
+ if kwargs:
69
+ try:
70
+ return text.format(**kwargs)
71
+ except (KeyError, ValueError):
72
+ return text
73
+ return text
@@ -0,0 +1,444 @@
1
+ Metadata-Version: 2.4
2
+ Name: sbackup-cli
3
+ Version: 1.0.0
4
+ Summary: 智能文件夹备份工具,支持增量备份和自定义配置
5
+ Author-email: xiatianxuan <xiatianxuan2025@163.com>
6
+ License: GPL-3.0
7
+ Project-URL: Homepage, https://gitee.com/xiatianxuan
8
+ Project-URL: Repository, https://gitee.com/xiatianxuan/sbackup
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Topic :: System :: Archiving :: Backup
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: py7zr>=1.1.0
20
+ Requires-Dist: tqdm>=4.67.3
21
+ Requires-Dist: zstandard>=0.25.0
22
+ Dynamic: license-file
23
+
24
+ # Sbackup: 智能文件夹备份工具
25
+
26
+ 一个轻量、高效的文件夹备份工具,支持命令行操作,帮助你轻松管理备份策略。
27
+
28
+ ## 📖 目录
29
+
30
+ - [简介](#简介)
31
+ - [功能特性](#功能特性)
32
+ - [快速开始](#快速开始)
33
+ - [安装](#安装)
34
+ - [使用方法](#使用方法)
35
+ - [配置文件](#配置文件)
36
+ - [实现原理](#实现原理)
37
+ - [开发指南](#开发指南)
38
+ - [运行测试](#运行测试)
39
+ - [代码结构](#代码结构)
40
+ - [常见问题](#常见问题)
41
+ - [贡献指南](#贡献指南)
42
+ - [许可证](#许可证)
43
+ - [作者](#作者)
44
+
45
+ ---
46
+
47
+ ## 简介
48
+
49
+ Sbackup 是一个轻量级的文件夹备份工具,支持通过命令行添加、删除和查看备份策略。它基于文件夹的最后修改时间来决定是否需要进行备份,确保你的数据始终保持最新状态。
50
+
51
+ ## 功能特性
52
+
53
+ - ✅ **增量备份**:仅备份已更改的文件夹,节省时间和存储空间
54
+ - ✅ **多格式支持**:支持 ZIP、tar、tar.gz、tar.bz2、tar.xz、tar.zst、7z 七种打包格式,全局和条目级均可独立指定
55
+ - ✅ **备份还原**:支持从备份文件解压还原到指定目录
56
+ - ✅ **备份清理**:自动删除旧备份,仅保留最近 N 个文件
57
+ - ✅ **加密备份**:支持 7z 格式密码加密
58
+ - ✅ **定时备份**:设置间隔自动执行,实现无人值守
59
+ - ✅ **备份历史**:记录每次备份的时间、大小和文件数,方便追溯
60
+ - ✅ **灵活的策略管理**:支持添加、删除和查看备份策略
61
+ - ✅ **自定义配置**:支持通过 `config.json` 自定义压缩算法、忽略模式等
62
+ - ✅ **国际化**:支持中文、英语、法语、西班牙语、俄语、德语、日语、葡萄牙语、韩语九种语言,可随时切换
63
+ - ✅ **轻量高效**:体积小,启动速度快,资源占用低
64
+ - ✅ **跨平台支持**:支持 Windows、macOS 和 Linux
65
+
66
+ ## 快速开始
67
+
68
+ ### 安装
69
+
70
+ #### 使用 uv 安装
71
+
72
+ ```bash
73
+ uv pip install sbackup
74
+ ```
75
+
76
+ #### 从源码安装
77
+
78
+ ```bash
79
+ git clone https://gitub.com/xiatianxuan/sbackup.git
80
+ cd sbackup
81
+ uv sync
82
+ ```
83
+
84
+ ### 使用方法
85
+
86
+ #### 基本语法
87
+
88
+ ```bash
89
+ uv run python main.py <command> [options]
90
+ ```
91
+
92
+ #### 可用命令
93
+
94
+ | 命令 | 描述 |
95
+ |------|------|
96
+ | `add` | 添加备份策略 |
97
+ | `rm` 或 `remove` | 删除备份策略 |
98
+ | `all` | 查看所有备份策略 |
99
+ | `save` | 执行备份 |
100
+ | `watch` | 定时执行备份 |
101
+ | `restore` | 从备份文件还原 |
102
+ | `version` | 查看版本信息 |
103
+ | `help` | 查看帮助信息 |
104
+
105
+ #### 全局参数
106
+
107
+ | 参数 | 描述 |
108
+ |------|------|
109
+ | `--lang zh_CN` / `en_US` / `fr_FR` / `es_ES` / `ru_RU` / `de_DE` / `ja_JP` / `pt_BR` / `ko_KR` | 设置界面语言(持久化到 config.json) |
110
+ | `--format zip` / `tar` / `tar.gz` / `tar.bz2` / `tar.xz` / `tar.zst` / `7z` | 设置打包格式(持久化到 config.json) |
111
+ | `--debug` | 开启调试日志 |
112
+
113
+ #### 添加备份策略
114
+
115
+ ```bash
116
+ uv run python main.py add <source> <dest> [-i ignore_patterns]
117
+ ```
118
+
119
+ 参数说明:
120
+ - **source**:需要备份的源文件夹路径
121
+ - **dest**:备份文件存放的目标路径
122
+ - **-i, --ignore**:需要忽略的文件或文件夹名称,使用逗号分隔(默认:`.git,__pycache__`)
123
+ - **--format**:条目级打包格式(仅作用于该备份策略,不指定则使用全局默认):`zip` / `tar` / `tar.gz` / `tar.bz2` / `tar.xz` / `tar.zst` / `7z`
124
+
125
+ 示例:
126
+ ```bash
127
+ # 使用全局默认格式添加策略
128
+ uv run python main.py add F:/my_folder F:/backup -i node_modules,.git
129
+
130
+ # 为该策略指定 tar.gz 格式(每次备份此文件夹都使用 tar.gz)
131
+ uv run python main.py add F:/my_folder F:/backup --format tar.gz
132
+
133
+ # 指定 7z 格式(仅此文件夹)
134
+ uv run python main.py add F:/my_folder F:/backup --format 7z
135
+ ```
136
+
137
+ #### 删除备份策略
138
+
139
+ ```bash
140
+ uv run python main.py rm <path>
141
+ ```
142
+
143
+ 参数说明:
144
+ - **path**:需要删除备份策略的源文件夹路径
145
+
146
+ 示例:
147
+ ```bash
148
+ uv run python main.py rm F:/my_folder
149
+ ```
150
+
151
+ #### 查看所有备份策略
152
+
153
+ ```bash
154
+ uv run python main.py all
155
+ ```
156
+
157
+ 显示当前所有已配置的备份策略。
158
+
159
+ #### 执行备份
160
+
161
+ ```bash
162
+ # 使用默认格式(ZIP)
163
+ uv run python main.py save
164
+
165
+ # 使用 tar.gz 格式
166
+ uv run python main.py --format tar.gz save
167
+
168
+ # 保留最近 5 个备份文件,自动清理旧的
169
+ uv run python main.py save --keep 5
170
+
171
+ # 使用 7z 格式并加密
172
+ uv run python main.py --format 7z save --password mysecret
173
+
174
+ # 英文界面 + tar.xz 格式
175
+ uv run python main.py --lang en_US --format tar.xz save
176
+ ```
177
+
178
+ **save 命令参数:**
179
+
180
+ | 参数 | 默认值 | 描述 |
181
+ |------|--------|------|
182
+ | `--keep N` | `0` | 保留最近 N 个备份文件,0 表示不清理 |
183
+ | `--password PASSWORD` | `""` | 加密密码(仅 7z 格式支持) |
184
+
185
+ 根据备份策略,自动备份已更改的文件夹。
186
+
187
+ #### 定时备份
188
+
189
+ ```bash
190
+ # 每 60 分钟执行一次备份
191
+ uv run python main.py watch --interval 60
192
+
193
+ # 每 2 小时备份一次,保留最近 10 个文件
194
+ uv run python main.py watch --interval 120 --keep 10
195
+
196
+ # 定时备份 + 7z 加密
197
+ uv run python main.py --format 7z watch --interval 60 --password mysecret
198
+ ```
199
+
200
+ **watch 命令参数:**
201
+
202
+ | 参数 | 默认值 | 描述 |
203
+ |------|--------|------|
204
+ | `--interval MINUTES` | `60` | 备份间隔(分钟) |
205
+ | `--keep N` | `0` | 保留最近 N 个备份文件 |
206
+ | `--password PASSWORD` | `""` | 加密密码(仅 7z 格式支持) |
207
+
208
+ 按 `Ctrl+C` 停止定时备份。
209
+
210
+ #### 还原备份
211
+
212
+ ```bash
213
+ uv run python main.py restore <backup_file> <target_dir>
214
+ ```
215
+
216
+ 参数说明:
217
+ - **backup_file**:备份文件路径(支持 .zip / .tar / .tar.gz / .tar.bz2 / .tar.xz / .tar.zst / .7z)
218
+ - **target_dir**:还原目标目录
219
+
220
+ 示例:
221
+ ```bash
222
+ uv run python main.py restore F:/backup/my_folder.tar.gz F:/restored
223
+ uv run python main.py restore F:/backup/my_folder.7z F:/restored
224
+ uv run python main.py restore F:/backup/my_folder.tar.zst F:/restored
225
+ ```
226
+
227
+ #### 查看版本信息
228
+
229
+ ```bash
230
+ uv run python main.py version
231
+ ```
232
+
233
+ ## 配置文件
234
+
235
+ Sbackup 支持通过 `config.json` 文件进行自定义配置。配置文件应放在项目根目录下。
236
+
237
+ ### 配置项说明
238
+
239
+ ```json
240
+ {
241
+ "compression_format": "ZIP",
242
+ "compression": {
243
+ "algorithm": "ZIP_DEFLATED",
244
+ "level": 6
245
+ },
246
+ "skip_patterns": [".git", "__pycache__"],
247
+ "data_file": "sbackup.json",
248
+ "lang": "zh_CN",
249
+ "password": ""
250
+ }
251
+ ```
252
+
253
+ | 配置项 | 类型 | 默认值 | 描述 |
254
+ |--------|------|--------|------|
255
+ | `compression_format` | string | `"ZIP"` | 打包格式,可选值:`ZIP`, `TAR`, `TAR_GZ`, `TAR_BZ2`, `TAR_XZ`, `TAR_ZST`, `7Z` |
256
+ | `compression.algorithm` | string | `"ZIP_DEFLATED"` | ZIP 压缩算法,可选值:`ZIP_DEFLATED`, `ZIP_STORED`, `ZIP_BZIP2`, `ZIP_LZMA` |
257
+ | `compression.level` | int | `6` | 压缩级别,范围 0-9(0 为不压缩,9 为最高压缩) |
258
+ | `skip_patterns` | list | `[".git", "__pycache__"]` | 需要忽略的文件或文件夹模式(支持 fnmatch 通配符和路径匹配) |
259
+ | `data_file` | string | 平台默认路径 | 备份策略数据文件的存放路径 |
260
+ | `lang` | string | `"zh_CN"` | 界面语言,可选值:`zh_CN`, `en_US`, `fr_FR`, `es_ES`, `ru_RU`, `de_DE`, `ja_JP`, `pt_BR`, `ko_KR` |
261
+ | `password` | string | `""` | 7z 加密密码 |
262
+
263
+ ### 示例配置
264
+
265
+ 使用 tar.bz2 格式进行高压缩率备份:
266
+
267
+ ```json
268
+ {
269
+ "compression_format": "TAR_BZ2",
270
+ "compression_level": 9,
271
+ "skip_patterns": [".git", "__pycache__", "node_modules", "*.log"],
272
+ "data_file": "backup_strategies.json",
273
+ "lang": "zh_CN"
274
+ }
275
+ ```
276
+
277
+ ### 打包格式对比
278
+
279
+ | 格式 | 扩展名 | 压缩率 | 速度 | 依赖 | 适用场景 |
280
+ |------|--------|--------|------|------|----------|
281
+ | ZIP | .zip | 中 | 快 | 标准库 | 通用,Windows 兼容性最好 |
282
+ | tar | .tar | 无 | 极快 | 标准库 | 纯归档,配合外部压缩 |
283
+ | tar.gz | .tar.gz | 中 | 快 | 标准库 | Linux/macOS 通用 |
284
+ | tar.bz2 | .tar.bz2 | 高 | 中 | 标准库 | 高压缩率归档 |
285
+ | tar.xz | .tar.xz | 最高 | 慢 | 标准库 | 长期归档,空间敏感 |
286
+ | tar.zst | .tar.zst | 中高 | 极快 | zstandard | 现代场景,速度与压缩率平衡 |
287
+ | 7z | .7z | 极高 | 慢 | py7zr | 最高压缩率,支持加密 |
288
+
289
+ ## 实现原理
290
+
291
+ Sbackup 通过以下方式实现备份功能:
292
+
293
+ 1. **备份策略存储**:备份策略存储在 JSON 文件中,包含文件夹路径、最后修改时间、目标路径、忽略模式和条目级打包格式。
294
+ 2. **增量备份**:通过比较文件夹的最后修改时间,仅备份已更改的文件夹。
295
+ 3. **多格式压缩**:使用 Python 内置的 `zipfile` 和 `tarfile` 模块,以及 `zstandard` 和 `py7zr` 第三方库,支持 7 种打包格式。
296
+ 4. **条目级格式**:每个备份策略可指定独立的打包格式(`add --format`),优先于全局 `--format` 设置;未指定时使用全局默认。
297
+ 5. **备份清理**:备份成功后自动扫描目标目录,按修改时间排序,删除超出保留数量的旧文件。
298
+ 6. **加密备份**:7z 格式支持 LZMA2 加密,通过 `--password` 参数或 `config.json` 配置。
299
+ 7. **定时备份**:`watch` 命令在循环中按指定间隔执行备份,`Ctrl+C` 安全退出。
300
+ 8. **备份历史**:每次备份后记录时间戳、文件大小和文件数量,保留最近 100 条记录。
301
+
302
+ ### 数据文件格式
303
+
304
+ ```json
305
+ {
306
+ "/path/to/source/folder": [
307
+ 1719235200.0,
308
+ "/path/to/target/folder",
309
+ [".git", "__pycache__"],
310
+ ""
311
+ ],
312
+ "/path/to/another/folder": [
313
+ 1719235200.0,
314
+ "/path/to/another/target",
315
+ [".git"],
316
+ "TAR_GZ"
317
+ ],
318
+ "_history": [
319
+ {
320
+ "time": "2026-05-01T12:00:00",
321
+ "source": "/path/to/source/folder",
322
+ "size_mb": 12.5,
323
+ "files_count": 150
324
+ }
325
+ ]
326
+ }
327
+ ```
328
+
329
+ 每个备份策略条目为 4 元素列表:`[mtime, target, skip_patterns, compression_format]`
330
+
331
+ | 字段 | 说明 |
332
+ |------|------|
333
+ | `mtime` | 源文件夹最后修改时间(用于增量备份判断) |
334
+ | `target` | 备份文件存放的目标路径 |
335
+ | `skip_patterns` | 需忽略的文件/文件夹模式列表 |
336
+ | `compression_format` | 条目级打包格式(空字符串表示使用全局默认) |
337
+
338
+ ## 开发指南
339
+
340
+ ### 运行测试
341
+
342
+ ```bash
343
+ uv run coverage run -m unittest discover -s tests -t . && uv run coverage report -m
344
+ ```
345
+
346
+ ### 代码结构
347
+
348
+ ```
349
+ sbackup/
350
+ ├── main.py # 程序入口
351
+ ├── sbackup/
352
+ │ ├── __init__.py # CLI 参数解析和命令分发
353
+ │ ├── __main__.py # python -m sbackup 入口
354
+ │ ├── config.py # 配置加载、语言持久化、数据路径
355
+ │ ├── compression.py # ZIP / TAR 压缩功能实现
356
+ │ ├── auto_save.py # 备份策略管理 + 备份历史
357
+ │ └── i18n.py # 国际化支持
358
+ ├── tests/
359
+ │ └── sbackup/
360
+ │ ├── test_auto_save.py # 备份策略测试
361
+ │ ├── test_compression.py # 压缩功能测试
362
+ │ ├── test_config.py # 配置加载测试
363
+ │ ├── test_i18n.py # 国际化测试
364
+ │ └── test_main.py # 主模块测试
365
+ ├── config.json # 配置文件
366
+ └── README.md # 文档
367
+ ```
368
+
369
+ ### 添加新功能
370
+
371
+ 1. 在 `sbackup/` 目录下创建新的模块文件
372
+ 2. 在 `sbackup/__init__.py` 中导入新功能的函数
373
+ 3. 在 `run()` 函数中添加新的命令行命令处理逻辑
374
+ 4. 在 `tests/` 目录下添加对应的测试文件
375
+
376
+ ## 常见问题
377
+
378
+ ### Q: 备份策略文件被误删了怎么办?
379
+
380
+ A: 备份策略存储在数据文件中。如果误删,可以通过重新运行 `add` 命令重新添加备份策略。
381
+
382
+ ### Q: 如何修改已添加的备份策略?
383
+
384
+ A: 目前不支持直接修改备份策略。你可以先使用 `rm` 删除旧的策略,再使用 `add` 添加新的策略。
385
+
386
+ ### Q: 支持远程备份吗?
387
+
388
+ A: 目前仅支持本地备份。远程备份功能正在开发中。
389
+
390
+ ### Q: tar.gz 和 ZIP 有什么区别?
391
+
392
+ A: tar.gz 在 Linux/macOS 上更常用,压缩率略高;ZIP 在 Windows 上更通用,兼容性最好。tar.bz2 和 tar.xz 提供更高的压缩率但速度较慢。tar.zst 是现代算法,速度极快且压缩率不错。7z 压缩率最高且支持加密。
393
+
394
+ ### Q: 如何加密备份?
395
+
396
+ A: 使用 7z 格式并设置密码:`uv run python main.py --format 7z save --password yourpassword`。密码也可以写入 `config.json` 的 `password` 字段。
397
+
398
+ ### Q: 如何自动清理旧备份?
399
+
400
+ A: 使用 `--keep` 参数:`uv run python main.py save --keep 5` 只保留最近 5 个备份文件。定时备份时同样支持:`uv run python main.py watch --interval 60 --keep 10`。
401
+
402
+ ### Q: 如何设置定时备份?
403
+
404
+ A: 使用 `watch` 命令:`uv run python main.py watch --interval 60` 每 60 分钟备份一次。按 `Ctrl+C` 停止。
405
+
406
+ ## 贡献指南
407
+
408
+ 欢迎提交 Issue 和 Pull Request!
409
+
410
+ 1. Fork 本仓库
411
+ 2. 创建你的特性分支 (`git checkout -b feature/AmazingFeature`)
412
+ 3. 提交你的更改 (`git commit -m 'Add some AmazingFeature'`)
413
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
414
+ 5. 提交 Pull Request
415
+
416
+ ### 代码风格
417
+
418
+ 本项目遵循 PEP 8 和 Google Python Style Guide。请确保你的代码:
419
+ - 使用类型注解
420
+ - 遵循 Google 风格的 docstrings
421
+ - 通过所有单元测试
422
+
423
+ ## 许可证
424
+
425
+ 本项目采用 GNU GPL v3.0 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
426
+
427
+ ## 作者
428
+
429
+ **xiatianxuan** (CodeSeed)
430
+
431
+ - [Gitee](https://gitee.com/xiatianxuan)
432
+ - [个人主页](https://xnors-codeseed.pages.dev/)
433
+
434
+ ## 特别鸣谢
435
+
436
+ - [Xnors Studio](https://xnors.github.io/)
437
+
438
+ ## 联系我们
439
+
440
+ 如有问题或建议,请发送邮件至:xiatianxuan2025@163.com
441
+
442
+ ---
443
+
444
+ *最后更新:2026年5月1日*
@@ -0,0 +1,12 @@
1
+ sbackup/__init__.py,sha256=XF4_uUjshKLecZV4GjSeLpOlYyzBwsrsEC4QiVrEDEQ,6770
2
+ sbackup/__main__.py,sha256=ddaQosqv41kdZaGnetQ9j5RyYpkfCLoRT3EWULewqKI,83
3
+ sbackup/auto_save.py,sha256=NdFua8j7Y8YLlmXxcTszulJkH5z1j49zGUgmFpSSNSk,11469
4
+ sbackup/compression.py,sha256=3F5XjbgT0BqfezDmP72GUOmjWd6Gb9x6rjlrnLB7X6Q,22011
5
+ sbackup/config.py,sha256=qZw5QqTN4VK4HS0Hm21WTojdhMLCkesPHWcUqbH2S0k,4070
6
+ sbackup/i18n.py,sha256=GW8i0vFB_GyAApKZKoJrd5-khzG1crTk_rIyrnaIqPM,2317
7
+ sbackup_cli-1.0.0.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
8
+ sbackup_cli-1.0.0.dist-info/METADATA,sha256=Yu2rn2DjNI-eGsPRtAYRJgifZNbF_nretkc4MH0F9cU,14578
9
+ sbackup_cli-1.0.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
10
+ sbackup_cli-1.0.0.dist-info/entry_points.txt,sha256=-7qtz-0qSQTRs0mg7brRz__DjJJeU8uZR-j98hKGiiY,40
11
+ sbackup_cli-1.0.0.dist-info/top_level.txt,sha256=jNao9iyjXz1ERKdH62V8XP_2HJ6FBilTWflLR0FQI0I,8
12
+ sbackup_cli-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ sbackup = sbackup:run