当您尝试使用工作目录上方的相对路径(例如)解压缩文件时../../foo
,您会收到以下消息:
warning: skipped "../" path component(s) in ../../foo
inflating: foo
问题是,我们的软件在安装过程中使用相对路径创建这些 zip,如果安装出错,我们会解压缩它们以将所有内容恢复原样。如果用户选择在正常安装目录“上方”存储一些数据文件,我们最终会得到../datafile
备份。这应该完全没问题,我们希望 unzip 信任存档并在需要时将文件放回原处。不幸的是,我找不到一个选项来告诉unzip
我不要担心../
路径组件并按照创建时的样子解压缩存档。有没有解压缩选项来执行此操作?
请注意,目前无法更改 zip 的创建方式,因此“不要那样做”不是可接受的答案。我们必须发挥我们所得到的牌。目标平台是 RHEL 5。
答案1
这应该可以满足您的要求
unzip -: foo.zip
从手册页
-:[除 Acorn、VM/CMS、MVS、Tandem 之外的所有版本] 允许将存档成员提取到当前“提取根文件夹”之外的位置。出于安全原因,解压缩通常会从提取的文件名称中删除“父目录”路径组件(“../”)。此安全功能(5.50 版的新增功能)可防止解压缩过程中意外将文件写入活动提取文件夹树头之外的“敏感”区域。 -: 选项让 unzip 切换回以前的、更自由的行为,以允许精确提取使用“../”组件在当前提取文件夹级别创建多个目录树的(较旧的)档案。此选项不允许显式写入根目录(“/”)。为此,需要将提取目标文件夹设置为根目录(例如 -d / )。但是,当指定 -: 选项时,仍然可以通过在 zip 存档中指定足够的“../”路径组件来隐式写入根目录。使用此选项时要格外小心。