通常,我会执行
rpm2cpio $rpm | cpio -idmv
但这会将确切的文件路径提取到本地文件夹中
即
./usr/local/mycompany/myapp/bin/app
./usr/local/mycompany/myapp/resource/...
是否可以在提取过程中重写文件路径,以便它们提取到
./myapp/bin/app
./myapp/resource/...
提取过程中是否可以重写文件路径
GNU
cpio
提供了 -r
选项,可以在提取过程中以交互方式重命名文件(“复制”)。但我想你想要一些自动的和/或可编写脚本的东西,并且没有记录的 cpio
功能提供此功能。
但是,在提取后移动所需的子树,然后删除额外的、可能是空的父目录应该是快速和直接的:
mv ./usr/local/mycompany/myapp .
test "$(realpath .)" != / && rm -rf ./usr
这增加了一点保护,防止以特权用户身份从文件系统根运行这些命令而引起的灾难,但总的来说,您不应该以特权运行它。