如何解压含绝对路径的ZIP压缩包?解决跳过不安全条目问题
解决FreeBSD下带绝对路径ZIP文件的解压问题
在FreeBSD 13.2的默认/usr/bin/unzip中,遇到带前导绝对路径的ZIP文件时,会因安全限制触发unzip: skipping insecure entry错误。以下是两种可行的解决方法:
方法一:使用bsdtar(推荐)
FreeBSD系统默认自带bsdtar,它支持处理ZIP格式,并且可以像tar一样通过参数移除前导路径:
bsdtar -xf highlight.zip --strip-components=1
这条命令会将所有文件的前导/去掉,以相对路径解压到当前目录,同时保留原有的子目录结构(比如/es/core.js会变成es/core.js)。
方法二:通过循环手动处理路径(适用于必须使用unzip的场景)
如果需要坚持使用unzip,可以通过脚本循环提取每个文件,手动去除前导路径:
unzip -l -qq highlight.zip | awk 'NR>3 {print $4}' | while read -r abs_path; do rel_path="${abs_path#/}" # 创建目标目录(如果不存在) mkdir -p "$(dirname "$rel_path")" # 提取文件内容到相对路径 unzip -p highlight.zip "$abs_path" > "$rel_path" done
unzip -l -qq:静默列出ZIP内的文件,仅输出路径awk 'NR>3':跳过列表的前3行表头内容${abs_path#/}:移除路径开头的/,得到相对路径mkdir -p:确保目标文件的父目录存在unzip -p:将文件内容输出到标准输出,再重定向到目标文件
内容的提问来源于stack exchange,提问作者user9645
相关产品推荐
相关产品推荐

