Mac下从子目录压缩生成的ZIP文件无法被系统归档工具打开
问题分析与修复
为什么会出现这个问题?
你在/scripts目录用./../作为压缩源,生成的zip里所有文件的路径都是../xxx这种相对路径。Mac自带的归档工具对这种路径结构的兼容性极差,直接判定归档为空;第三方解压工具对路径解析没那么严格,所以能正常读取内容。
另外你的排除规则-x ./../_backups/*虽然能排除目标文件夹,但进一步让zip内的路径结构变得混乱,加重了Mac工具的识别问题。
修复方案
方案1:先切到根目录再执行(最稳妥)
不管当前在哪个子目录,先切换到项目根目录再跑压缩命令,这样生成的zip里的路径都是基于根目录的正常结构,不会出现../:
# 手动执行的话,先cd到根目录 cd /你的项目根目录路径 zip -r ./_backups/man_backup_sub.zip ./ -x ./_backups/*
如果是写Shell脚本,自动获取根目录路径再切换:
# 获取脚本所在目录的上级目录(即项目根目录) ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd) cd "$ROOT_DIR" zip -r ./_backups/man_backup_sub.zip ./ -x ./_backups/*
方案2:全用绝对路径
把压缩目标、源目录、排除路径都换成绝对路径,彻底避免相对路径的坑:
zip -r /项目根目录/_backups/man_backup_sub.zip /项目根目录/ -x /项目根目录/_backups/*
验证方式
执行完命令后,用unzip -l /生成的zip文件路径查看归档内的文件列表,如果所有路径都是subfolder/file1.html、index.html这种正常格式(没有../前缀),Mac归档工具就能正常打开了。
内容的提问来源于stack exchange,提问作者renew
相关产品推荐
相关产品推荐

