如果我有一个 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