我是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层。