如何在解压缩时重命名 tarball 中的顶部文件夹?

如何在解压缩时重命名 tarball 中的顶部文件夹?

如果我有一个 tar.gz 存档,其中包含一个名为 的文件夹<somename>-<somenumber>,如何将其解压到名为 的文件夹中<somename>

例如,该文件somearchive.tar.gz包含一个顶级文件夹somearchive-0.1.2,我尝试了类似的操作:

tar xvfz somearchive.tar.gz --transform s/[a-zA-Z]+\-[0-9\.]+/somearchive/

但这会将其提取到默认文件夹。

答案1

正如 Steeldriver 指出的,tar --transform需要一个 sed 替换表达式,它使用基本正则表达式语法,而不是扩展正则表达式语法,特别是“一个或多个”运算符 is \+, not +。看 为什么我的正则表达式在 X 中有效但在 Y 中无效?

tar xvfz somearchive.tar.gz --transform 's/^[a-zA-Z]\+-[0-9.]\+/somearchive/'

或者你可以简单地做到这一点

tar xvfz somearchive.tar.gz --transform 's!^[^/]*!somearchive!'

答案2

吉尔斯的回答完全符合我的问题。然而,我也发现这个替代方案也有效:

mkdir somearchive
tar xvfz somearchive.tar.gz --strip 1 -C somearchive

相关内容