我们如何从大型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


然后我该如何提取来自tar.gz的文件?

评论

请注意,任何解决方案都必须首先解压缩整个存档:superuser.com/questions/655739/…如果要避免这种情况,则需要使用其他格式,例如zip。 ZIP将提供较少的压缩,因为它会分别压缩单个文件:superuser.com/questions/1013309/…我想知道是否存在一种既支持速度又能够提取单个文件的格式。

#1 楼

您还可以使用tar -zxvf <tar filename> <file you want to extract>

您必须正确输入文件名,如tar ztf test.tar.gz所示。如果说例如./extract11some/bunch/of/dirs/extract11,这就是您必须提供的(文件将以该名称显示,所需的目录会自动创建)。



-x:指示tar提取文件。

-f:指定文件名/ tarball名称。

-v:详细(提取文件时显示进度)。

-z:过滤器通过gzip存档,用于解压缩.gz文件。


评论


$ tar -zxvf test.tar.gz extract11 tar:extract11:在存档tar中找不到:错误退出由于先前的错误而延迟

– Ankit Vashistha
13年1月16日在7:52

然后尝试这个tar tf archive.tar.gz | grep extract11.please检查extract11是否在存档中

–harish.venkat
13年1月16日在8:06

您必须按照tar ztf test.tar.gz所示正确输入文件名。如果说例如./extract11或some / bunch / of / dirs / extract11,这就是您必须提供的(文件将以该名称显示,并自动创建所需的目录)。

– vonbrand
13年1月21日在20:16



我想在这里添加一点,-z选项在某些版本的UNIX(例如HP-UX)中不起作用。

– Ankit Vashistha
15年8月26日在6:54

@ pj-brunet:不,f不能在结尾。但必须紧随其后的是文件名。该示例与tar名称后面的所有其他选项一起正常工作:tar -f mytar.tar.gz -zxv dir / somefile。它从“ mytar.tar.gz”中提取“ dir / somefile”。

– mivk
19年1月13日在22:06



#2 楼

假设您有一个名为lotsofdata.tar.gz的压缩文件,并且只知道其中有一个文件,但是您所能记住的只是它的名称包含单词contract。您有两种选择:

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

选项1

$ tar -tzf lotsofdata.tar.gz | grep contract


这将列出名称中包含您已知部分的所有文件的详细信息。然后使用以下方法提取所需的内容:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>


您可能需要./才能起作用。

选项2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'


取决于您,您会发现更容易或更有用。

评论


tar -xzf lotsofdata.tar.gz <上面列表中的完整路径和文件名>为我工作,在完整路径的开头给出了./

–user13107
17年4月6日在7:26

您可能需要耐心等待一段时间,...也许这很明显,但是它将提取当前目录中的完整目录结构,即使这些目录尚不存在。

– PJ Brunet
18年5月28日在3:20



BSD tar(至少在macOS上)不支持--wildcards选项。我仍然可以通过-x -O * foo得到类似的行为。 * foo是我的文件名glob,因为我知道文件以foo结尾。

–胡锦涛
18年7月31日在14:16

#3 楼

前几天,我试图从压缩包中提取数百个文件,而提取数千个文件。单个通配符无法引用我需要的文件。因此,我用Google搜索并找到了此页面。

但是,上面的技巧似乎都不适合我的任务。我最后读了这个人,发现了这个选项--files-from,所以我的最终解决方案是

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -


,它的工作原理很像。

更新:列表文件应该具有与tar -tvf相同的格式,否则您将无法解压缩任何文件。

#4 楼

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

从本地文件:

$ tar xvf file.tgz path/README.txt 2nd_file.txt


从远程URL:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt


#5 楼

如果省略括号,您的示例对我有用。

$ tar --extract --file=test.tar.gz extract11


如果文件extract11在子文件夹中,则应指定压缩包中的路径。

$ tar --extract --file=test.tar.gz subfolder/extract11


评论


$ tar --extract --file = test.tar.gz extract11 tar:extract11:在存档中找不到tar:错误退出由于先前的错误而延迟

– Ankit Vashistha
13年1月16日在7:51



然后,令人沮丧的是extract11不在tar文件中。确保需要提供相对路径。查看编辑

–伯恩哈德
13年1月16日在7:59