Mac系统zip命令无法自动创建目标子目录生成压缩包问题咨询
问题根因
macOS 原生 zip 命令本身没有自动创建输出文件上层不存在目录的能力,报错是因为你要输出zip的%Y%m%d格式日期目录还未创建,和你传入的参数无关。
代码修复方案
你只需要在定义完日期路径today后,补充判断目录是否存在、不存在则创建的逻辑即可,同时修正原代码中只定义命令字符串、未实际执行命令的问题,修改后的完整代码如下:
# pylint: disable=missing-module-docstring import os import time source = "/Users/bogdan/Downloads/tests/new/" target_dir = os.path.join(source, "backup") # 用os.path.join拼接路径更规范,兼容不同操作系统 today = os.path.join(target_dir, time.strftime("%Y%m%d")) now = time.strftime("%H%M%S") # 创建backup根目录 if not os.path.exists(target_dir): os.mkdir(target_dir) print("Created backup dir") # 新增:创建当天日期的子目录 if not os.path.exists(today): os.mkdir(today) print("Created date subdir") target = os.path.join(today, now + ".zip") zip_command = f"zip -qr {target} {source}" print(zip_command) # 执行zip命令 os.system(zip_command)
终端直接执行zip的解决办法
如果要直接在终端执行命令,可以先调用mkdir创建对应目录再执行zip,用&&连写即可:
mkdir -p /Users/bogdan/Downloads/tests/new/backup/20210922 && zip -qr /Users/bogdan/Downloads/tests/new/backup/20210922/123228.zip /Users/bogdan/Downloads/tests/new
其中mkdir -p参数可以自动创建多级不存在的目录,就算上层目录不存在也不会报错。
内容的提问来源于stack exchange,提问作者Bogdan Mind
相关产品推荐
相关产品推荐

