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

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

我是 Linux 新手,似乎遇到了障碍。我知道我可以使用命令提取特定档案,tar xvfz archivename.tar.gz sampledir/但是我如何提取sampledir/testdir/而不是档案所在的路径,例如,当前档案位于路径中/tmp/archivename.tar.gz,我想提取sampledirtestdir路径中的哪个位置/tmp/testdir

答案1

您正在寻找的是以下-C选项:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

根据您的示例,用法:

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

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

答案2

您不需要玩疯狂的游戏来解压所有内容。 Tar 完全支持仅提取存档中的文件子集,如以下(简单)示例所示:

/tmp $ mkdir tarsrc
/tmp $ cd tarsrc
/tmp/tarsrc $ mkdir a b
/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

诀窍在于路径规范必须与 tarfile 的内容完全匹配。因此,当您执行 时tar tf,如果路径以 开头./,则必须将其放入,如果没有,则必须将其省略。此外,如果您想提取子子子子子子子子子路径,当您完成后,它将最终在文件系统中深入 N 层。

相关内容