diff --git a/.gitignore b/.gitignore index a4dc8c1..8f772c5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,13 @@ dist/ wheels/ *.egg-info .ruff_cache/ +*.build/ +*.dist/ +*.onefile-build/ +*.tmp/ +.vscode/ +*.exe +sbackup.json # Virtual environments .venv diff --git a/sbackup/__init__.py b/sbackup/__init__.py index 068160f..15981b8 100644 --- a/sbackup/__init__.py +++ b/sbackup/__init__.py @@ -4,7 +4,7 @@ import sys VERSION = "0.0.1" help_string = f""" version: {VERSION} -为你的文件保驾护航. +为你的文件夹保驾护航. add 添加备份策略. rm, remove 删除备份策略. @@ -13,7 +13,9 @@ save 备份所有文件夹. """ def run(): - command: str = sys.argv[1] + command: str = "help" + if len(sys.argv) > 1: + command = sys.argv[1] if command == "add": add_folder(input("备份文件夹:"), input("目标文件夹:"), input("需要忽略的文件夹或文件(用" "隔开):")) elif command == "rm" or command == "remove": diff --git a/sbackup/pack.py b/sbackup/pack.py index 4dbbba6..c3d5612 100644 --- a/sbackup/pack.py +++ b/sbackup/pack.py @@ -31,27 +31,23 @@ def zip_folder( :param skip_patterns: 跳过压缩的文件或文件夹 :type skip_patterns: list """ - #print(folder_path) - #print(zipfile_path) folder_path = os.path.abspath(folder_path) + if zipfile_path is None: - zipfile_path = os.path.join( os.path.dirname(folder_path), os.path.basename(folder_path) + ".zip" ) - if not zipfile_path.lower().endswith(".zip"): - #print(os.path.splitext(zipfile_path)[0]) - if not os.path.splitext(zipfile_path)[0]: - zipfile_path = os.path.join( - os.path.dirname(folder_path), os.path.basename(folder_path) + ".zip" - ) - else: - zipfile_path = os.path.splitext(zipfile_path)[0] + ".zip" + else: + zipfile_path = os.path.abspath(zipfile_path) + # 如果 zipfile_path 是一个目录(包括盘符根目录如 "G:/"),则在其中创建 ZIP + if os.path.isdir(zipfile_path): + zipfile_path = os.path.join(zipfile_path, os.path.basename(folder_path) + ".zip") + elif not zipfile_path.lower().endswith(".zip"): + zipfile_path += ".zip" + if not os.path.isdir(folder_path): - #print(f"{folder_path} 不是一个有效的文件夹或不存在.") + print(f"{folder_path} 不是一个有效的文件夹或不存在.") return - #print(folder_path) - #print(zipfile_path) try: with zipfile.ZipFile(zipfile_path, "w", zipfile.ZIP_DEFLATED) as zipf: for root, dirs, files in os.walk(folder_path): @@ -62,9 +58,10 @@ def zip_folder( file_path = os.path.join(root, file) arcname = os.path.relpath(file_path, os.path.dirname(folder_path)) zipf.write(file_path, arcname) + print(f"成功备份: {zipfile_path}") except PermissionError: print(f"权限不足:无法写入 '{zipfile_path}'") except OSError as e: print(f"系统错误:{e}") except Exception as e: - print(f"未知错误:{e}") + print(f"未知错误:{e}") \ No newline at end of file