ugly_name.tar
的文件,提取后该文件将成为ugly_name
目录。我可以使用什么命令将生成的目录名称改为pretty_name
?#1 楼
这应该起作用:mkdir pretty_name && tar xf ugly_name.tar -C pretty_name --strip-components 1
-C
在解压缩(或打包)之前更改到指定目录。 --strip-components
从存储在存档中的文件名中删除指定数量的目录。请注意,这并不是真正可移植的。 GNU tar和至少某些BSD tar具有
--strip-components
选项,但在其他类似unix的平台上似乎不存在。 tar xf ugly_name.tar && mv ugly_name pretty_name
#2 楼
在GNU tar≥1.16的情况下,请使用--transform
将sed正则表达式转换应用于每个文件名(该转换应用于归档文件的完整路径):ugly_name
是归档文件中所有文件名的顶级组件,您无需为精确匹配而烦恼:tar xf foo.tar --transform 's!^ugly_name\($\|/\)!pretty_name!'
如果您不知道文件名在顶层目录中,尽管您可能更喜欢使用
--strip-components
,但仍然可以使用此方法。以类似sed的替换表达式作为参数。tar xf foo.tar --transform 's/ugly_name/pretty_name/'
#3 楼
最简单的方法tar xvf dml/ugly_name.tar --one-top-level=pretty_name --strip-components 1
评论
(1)这显然不是最简单的方法,因为smac89发布了一个具有--one-top-level = pretty_name而没有--strip-components1的答案。(2)相反,被接受的答案(由Mat发布)具有-带--one-top-level = pretty_name的strip-components1。 (3)您能否解释一下,结合这些选项,您的答案为什么比任何一个旧的都要好?请不要回应发票;编辑您的答案,使其更清晰,更完整。
– G-Man说“恢复莫妮卡”
18/09/21在3:31
也许一个真实的例子可以帮助您阐明:`wgetdev.mysql.com/get/Downloads/MySQL-5.7/…tar xvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz --one-top -level = mysql57 --strip-components 1`
–侯爵夫人
18-09-22在4:11
这个答案比投票最多的人更优雅。
– KaiserKatze
19年5月21日在15:46
@ G-Man --strip-component 1是必需的,使用mkdir或--strip-components 1方法,否则您将获得pretty_name / ugly_name /。
– davidA
19-09-24在23:14
这确实是最简单的方法
–smac89
19/09/25'1:35
#4 楼
使用这个:tar -xvf ugly_name.tar
mv ugly_name pretty_name
评论
您可能希望在这两个命令之间使用&& list运算符,因此仅当第一个成功时才执行第二个命令。
–manatwork
2012年10月12日上午9:48
如果目录ugly_name已经存在,则可能会产生不良后果。
–德鲁·多曼(Drew Dormann)
17年5月12日在22:05
#5 楼
编辑如注释中所指出,此方法不适用于格式正确的档案,但是正如另一个答案所示,您应该添加
--strip-components 1
使其真正起作用。我已经使用此新选项进行了测试,它既适用于具有顶级名称的存档,也适用于不具有顶级名称的存档。为我工作:tar zxvf ugly_name.tgz --one-top-level=pretty_name
`--one-top-level [= dir]'
告诉tar创建提取目录下的一个新目录(或传递给`-C的目录),并用于
防止tarbombs。在没有dir参数的情况下,新目录的名称
将等于存档的基本名称(文件
名称减去存档后缀,如果可以识别的话)。
不以该目录名开头的任何成员名(在从
--transform和--strip-components转换之后)都将带有前缀。
可识别的文件名后缀是“ .tar”,任何压缩后缀
可通过-auto-compress识别。
评论
这样做的问题是它没有重命名顶层目录,而是创建了一个名为pretty_name的新层,其中包含原始的顶层目录。例如。如果tar xzf ugly_name.tgz将创建一个名为ugly_name /的目录,那么您提供的命令将创建pretty_name / ugly_name /。
– davidA
19-09-24在23:12
@davidA好点。我已经更新我的答案以包括对此的修复
–smac89
19-09-25在1:39
评论
我想我会坚持使用愚蠢的版本:)
– phunehehe
2011年4月11日在2:25
@phunehehe:智能版本的一个优点是您不必事先知道什么是未标记的目录名
– tshepang
2011年4月12日10:00
我可以补充一点,这不仅适用于“ Pretty_name”。您也可以通过这种方式解压缩到特定目录。示例:tar -xvf /tmp/backupfiles.tar -C / var / www /
–一般乡下人
16年1月23日在2:28
我通常使用愚蠢的方式,并且在不知道丑陋的名字或不想写下它的情况下使用通配符。 mv ugly- * pretty_name
–大卫·格雷森(David Grayson)
17年7月26日在5:14
如果已经有ugly_name目录,那么哑巴方式将不起作用。顺便说一句,情人眼里是美丽。
– kmiklas
19年4月23日在14:51