题 tar - 在提取时删除前导目录组件


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

压缩

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

提取

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

这将产生:

/tmp/var/www/site

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

我希望它提取到:

/tmp/site

75
2017-11-11 14:58






答案:


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

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

27
2017-11-11 15:12



TMTOWTDI。这也可以,使用相同的 -C 选项 ;) - MikeyB
他想从一些主要组件中剥离路径,而不是更改输出目录。请参阅下面的正确答案。 - aymericbeaumet
当其他人准备存档时,我们无法使用它。 - jww
因为``_t =前缀 - $(日期+%Y%m%d); tar -cjf“.backups / $ _ t.tar.bz2”--transform =“s#^(\ ./)?#$ _ t / #x;” - 文件......; tar -df“.backups / $ _ t.tar.bz2”--strip-components = 1``` - AnrDaemon


你想用 --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

206
2017-11-11 15:04



这个答案更好,因为在创建tar之前你不必考虑它。您可以将它与已创建的tar文件一起使用。谢谢@MikeyB! - Fabien Quatravaux
这就像一个魅力!谢谢! - Marcello de Sales
我很高兴地报告这在GNU tar和BSD tar中都有效。 - Nathan Osman
并且因为你可能不是tar创建者......(或者如果你用另一种工具做这件事而且那个工具做傻事......) - xenoterracide
你可能仍然会失踪 --strip-components 如果你使用的是busybox嵌入式实现的标志 tar但是。 - sylvainulg