tar-提取时删除主要目录组件


104

如何仅提取目标目录而不提取完整的目录树?

压缩

tar cf /var/www/site.tar /var/www_bak/site

提取

tar xf /var/www/site.tar -C /tmp

这将产生:

/tmp/var/www/site

提取文件时,如何避免整个目录树被创建?

我想要将其提取为:

/tmp/site

Answers:


34

为什么-C在创建时不使用选项:

$ tar cf /var/www/site.tar -C /var/www_bak/ site

1
TMTOWTDI。使用相同的-C选项也可以工作;)
MikeyB 2011年

12
他想从一些主要组件中删除路径,而不是更改输出目录。请参阅以下正确答案。
aymericbeaumet

4
当其他人准备存档时,我们将无法使用它。

因为```_t = prefix-$(date +%Y%m%d); tar -cjf“ .backups / $ _ t.tar.bz2” --transform =“ s#^(\ ./)?#$ _ t /#x;” -文件...; tar -df“ .backups / $ _ t.tar.bz2” --strip-components =
1```– AnrDaemon

258

您要使用以下--strip-components=NUMBER选项tar

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

您的命令将是:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp

19
这个答案更好,因为在创建tar之前不必考虑它。您可以将其与已经创建的tar文件一起使用。谢谢@MikeyB!
Fabien Quatravaux 2014年

4
我很高兴地报告在GNU tar和BSD tar中都可以使用。
内森·奥斯曼

4
,因为您可能不是tar创建者...(或者,如果您正在使用其他工具执行该操作,而该工具却做了愚蠢的事情……)
xenoterracide

但是,--strip-components如果您使用的是忙碌嵌入式的tar,则可能仍会丢失标志。
sylvainulg '18年

1
@FabienQuatravaux好吧,是的-如果您犯了一个错误并创建了一个归档文件,其中包含您在提取过程中不希望看到的主要目录。但是,建立存档时首先要避免出现不需要的目录,这显然是很清楚的。
卡拉夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.