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