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

cla*_*rkk 142 linux tar

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

压缩

tar cf /var/www/site.tar /var/www_bak/site
Run Code Online (Sandbox Code Playgroud)

提炼

tar xf /var/www/site.tar -C /tmp
Run Code Online (Sandbox Code Playgroud)

这将产生:

/tmp/var/www/site
Run Code Online (Sandbox Code Playgroud)

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

我希望它提取到:

/tmp/site
Run Code Online (Sandbox Code Playgroud)

Mik*_*eyB 367

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

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction
Run Code Online (Sandbox Code Playgroud)

你的命令是:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp
Run Code Online (Sandbox Code Playgroud)

  • 这个答案更好,因为您不必在 tar 创建之前考虑它。您可以将它与已创建的 tar 文件一起使用。谢谢@MikeyB! (29认同)
  • 并且因为您可能不是 tar 的创建者...(或者如果您使用其他工具进行操作而该工具会做一些愚蠢的事情...) (8认同)
  • 我很高兴地报告这在 GNU tar 和 BSD tar 中都有效。 (7认同)
  • @FabienQuatravaux 好吧,是的---如果您犯了一个错误并创建了一个存档,其中包含您不想在提取过程中看到的前导目录。但是,首先构建存档时不带前导的不良目录会更清晰。 (3认同)
  • 这是正确的答案! (3认同)

qua*_*nta 48

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

$ tar cf /var/www/site.tar -C /var/www_bak/ site
Run Code Online (Sandbox Code Playgroud)

  • 他想从一些主要组件中剥离路径,而不是更改输出目录。正确答案见下文。 (18认同)
  • 当其他人准备存档时,我们无法使用它。 (13认同)