如何从大型 tar.gz 存档中提取单个文件夹?

Gar*_*all 171 shell tar gzip

我在5GB存档上使用此命令

tar -zxvf archive.tar.gz /folder/in/archive
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?似乎永远没有命令行输出......

Ale*_*ios 195

tar默认存储相对路径。如果您尝试存储绝对路径,GNU tar 甚至会这样说:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)

如果您需要提取特定文件夹,请查看 tar 文件中的内容:

tar -tvf foo.tar
Run Code Online (Sandbox Code Playgroud)

并记下确切的文件名。就我的foo.tar文件而言,我可以/home/foo/bar通过以下方式提取:

tar -xvf foo.tar home/foo/bar # Note: no leading slash
Run Code Online (Sandbox Code Playgroud)

所以不,您发布的方式(必然)不是正确的方式。您必须省略前导斜杠。如果要模拟绝对路径,cd /请先执行并确保您是超级用户。此外,这也是一样的:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option
Run Code Online (Sandbox Code Playgroud)

tar将路径转换为相对路径的原因非常明显。一是能够在原始来源以外的地方恢复档案。另一个是安全。您可以解压缩存档,期望其文件出现在您当前的工作目录中,而不是错误地覆盖其他地方的系统文件(或您自己的工作)。

注意:如果使用该-P选项,tar 归档绝对路径。因此,在提取之前检查大档案的内容总是值得的。

  • `--strip-components=N` 可能对这里的某些人有用。 (57认同)
  • 在我的例子中,有必要写 `./foldername/` 而不是 `foldername`,我猜这是因为当我创建 tar 时,我用 `tar -cvf santi.tar ./*` 创建了它,当我“列出”tar 这就是它所说的`drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/` (3认同)