如何从 tar.gz 中提取特定文件

Ank*_*tha 166 tar

我们如何从大型 tar.gz 文件中提取特定文件?我在这个问题中找到了从 tar 中提取文件的过程,但是,当我在那里尝试提到的命令时,出现错误:

$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)

然后我如何从中提取文件tar.gz

har*_*kat 182

你也可以使用 tar -zxvf <tar filename> <file you want to extract>

您必须完全按照tar ztf test.tar.gz显示的方式写入文件名。如果它说 eg ./extract11, or some/bunch/of/dirs/extract11,那就是您必须提供的(并且文件将显示在该名称下,所需的目录会自动创建)。

  • -x: 指示 tar 提取文件。
  • -f: 指定文件名/tarball 名称。
  • -v:详细(在提取文件时显示进度)。
  • -z: 通过 gzip 过滤存档,用于解压 .gz 文件。

  • 你必须像 `tar ztf test.tar.gz` 显示的那样准确地写出文件名。如果它说例如`./extract11` 或`some/bunch/of/dirs/extract11`,那就是你必须提供的(并且文件将显示在该名称下,需要的目录会自动创建)。 (11认同)
  • 非常感谢,太棒了。为了查看文件名,我使用了“vim &lt;tar filename&gt;”,为了将文件复制到特定目录中,我必须在文件名之前使用 -C 。即:```tar -zxvf &lt;tar 文件名&gt; -C &lt;您的自定义目录&gt; &lt;您要提取的文件&gt;```。希望这对那里的人有帮助 (6认同)
  • @pj-brunet:不,“f”不能在末尾。但后面必须直接跟文件名。此示例在 tar 名称后使用所有其他选项都可以正常工作:`tar -f mytar.tar.gz -zxv dir/somefile`。它从“mytar.tar.gz”中提取“dir/somefile”。 (2认同)

小智 51

假设您有一个名为 tarball 的 tarball,lotsofdata.tar.gz并且您只知道其中有一个您想要的文件,但您只记得它的名称包含单词contract. 您有两个选择:

使用targrep列出您的 tarball 的内容,以便您可以找出与您知道的部分匹配的任何文件的完整路径和名称,然后tar在您知道其确切详细信息的情况下使用提取该文件,或者您可以使用两个鲜为人知的开关只提取与您对文件名知之甚少的文件名相匹配的所有文件 - 对于此选项,您不需要知道全名或其路径的任何部分。详情如下:

选项1

$ tar -tzf lotsofdata.tar.gz | grep contract
Run Code Online (Sandbox Code Playgroud)

这将列出名称包含您已知部分的所有文件的详细信息。然后你提取你想要的使用:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>
Run Code Online (Sandbox Code Playgroud)

您可能需要./在您的路径前使其工作。

选项 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'
Run Code Online (Sandbox Code Playgroud)

取决于您认为哪个更容易或最有用。


小智 12

前几天,我试图从包含数千个文件的 tarball 中提取数百个文件。我需要的文件不能被单个通配符引用。所以我用谷歌搜索并找到了这个页面。

但是,上述技巧似乎都不适合我的任务。我最终阅读了这个人,并找到了这个选项--files-from,所以我的最终解决方案是

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力。

更新:列表文件的格式应与您在 中看到的格式相同tar -tvf,否则您将无法提取任何文件。


ken*_*orb 7

请在下面找到从 tar.gz 文件中提取特定文件的示例。

从本地文件:

$ tar xvf file.tgz path/README.txt 2nd_file.txt
Run Code Online (Sandbox Code Playgroud)

从远程 URL:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
Run Code Online (Sandbox Code Playgroud)