我可以使用tar提取特定文件夹到另一个文件夹吗?

我是Linux的新手,似乎已经遇到了一个绊脚石。 我知道我可以使用tar xvfz archivename.tar.gz sampledir/命令来提取特定档案,但是我怎样才能提取sampledir/ testdir/而不是归档所在的path,例如当前档案在path/tmp/archivename.tar.gz ,我想提取sampledir到path/tmp/testdir

你正在寻找的是-C选项:

 $ man tar <snip> -C, --directory DIR change to directory DIR 

用法,按你的例子​​:

 $ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/ 

此外,您可能有兴趣知道现代版本的tar不需要z标志来解压缩gzip文件; 他们会注意到这是一个.gz和自动做正确的事情。

你不需要玩弄任何东西来玩疯狂的游戏。 Tar完全支持仅提取档案中的一部分文件,如以下(简单)示例所示:

 /tmp $ mkdir tarsrc /tmp $ cd tarsrc /tmp/tarsrc $ mkdir ab /tmp/tarsrc $ touch a/aaa b/bbb /tmp/tarsrc $ tar cf ../tartest.tar . /tmp/tarsrc $ cd .. /tmp $ mkdir tardest /tmp $ cd tardest /tmp/tardest $ tar xf ../tartest.tar ./a /tmp/tardest $ ls -R .: a/ ./a: aaa 

诀窍是pathspec必须完全匹配tarfile的内容。 所以当你做一个tar tf ,如果path以./开头,你必须把它放进去,如果没有,就不得不放弃。 另外,如果你想提取一个子子子子子子子path,那么当你完成后,它将在文件系统中最终达到N层。