无法修改tar解压命令时如何绕过-C参数调整文件解压路径
首先明确固定解压命令的执行逻辑,所有调整都围绕这个逻辑展开:
执行
tar -zxf ../service.tar.gz -C opt/mag/ --strip-components=2时,会按三步处理:
- 切换当前工作目录到指定的
opt/mag/- 对压缩包内每个文件的原始路径,移除前2层目录
- 将处理后的剩余路径拼接到当前工作目录,得到最终的文件存放路径
根据你想要的最终存放位置,有两种可行方案:
方案1:需将config.json存放在opt/mag/目录下
仅需调整压缩包内config.json的原始路径,让它移除前2层后的剩余路径刚好匹配你想要的、相对于opt/mag/的路径即可,不会影响其他原有文件的解压结果。
举个例子:如果你希望最终路径为opt/mag/client/py/utils/mappings/templates/config.json,只需要把压缩包内config.json的路径修改为opt/mag/client/py/utils/mappings/templates/config.json:
- 原始路径移除前2层
opt/mag/后,剩余client/py/utils/mappings/templates/config.json - 拼接工作目录
opt/mag/后,刚好得到预期路径。
方案2:需将config.json存放在opt/mag/目录之外(比如原始的opt/client/py/xxx路径)
可以利用相对路径的层级穿越规则实现,该方案仅要求解压环境的tar命令没有开启严格路径安全限制(绝大多数默认配置的tar都支持)。
操作方法:将压缩包内config.json的路径修改为dummy1/dummy2/../../opt/client/py/utils/mappings/templates/config.json:
- 原始路径移除前2层
dummy1/dummy2/后,剩余../../opt/client/py/utils/mappings/templates/config.json - 拼接工作目录
opt/mag/后,完整路径为opt/mag/../../opt/client/py/utils/mappings/templates/config.json,化简后就是根目录下的原始路径opt/client/py/utils/mappings/templates/config.json,完全符合预期。
补充说明:如果解压环境的tar开启了
--restrict等安全参数拦截路径穿越,该方案无法生效,只能选择方案1调整路径到opt/mag/目录下。
内容的提问来源于stack exchange,提问作者cristid9
相关产品推荐
相关产品推荐

