使用cpio提取RPM转储文件时,能否修改文件路径?
如何在rpm2cpio提取时重写文件路径
当然可以,有两种简单直接的方法实现路径重写:
方法1:直接用cpio的--transform选项
cpio本身支持通过--transform(简写-T)参数修改归档内的路径,它接受sed风格的替换表达式。针对你的需求,命令可以写成:
rpm2cpio $rpm | cpio -idmv --transform 's|^\./usr/local/mycompany/myapp/|./myapp/|'
s|原路径|新路径|是sed的替换语法,这里用|作为分隔符,避免和路径里的/冲突^符号确保只替换路径开头的匹配部分,不会误改文件名或子路径里的相同字符串
方法2:用sed预处理路径后再传给cpio
如果你更习惯用sed处理文本,也可以先修改cpio归档中的路径记录,再交给cpio提取:
rpm2cpio $rpm | sed 's|^\./usr/local/mycompany/myapp/|./myapp/|' | cpio -idmv
测试小技巧
在正式提取前,可以用cpio的t参数先预览修改后的路径,确认没问题再执行提取:
rpm2cpio $rpm | cpio -t --transform 's|^\./usr/local/mycompany/myapp/|./myapp/|'
内容的提问来源于stack exchange,提问作者artman41
相关产品推荐
相关产品推荐

