我们如何从大型 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
?
答案1
您还可以使用tar -zxvf <tar filename> <file you want to extract>
tar ztf test.tar.gz
您必须按照显示的内容准确写入文件名。如果它显示例如./extract11
、 或some/bunch/of/dirs/extract11
,这就是您必须提供的内容(并且该文件将完全以该名称显示,所需的目录会自动创建)。
-x
:指示tar解压文件。-f
:指定文件名/压缩包名称。-v
:详细(提取文件时显示进度)。-z
:通过gzip过滤压缩包,用于解压.gz文件。-t
:列出存档的内容
答案2
假设您有一个名为 的 tarball lotsofdata.tar.gz
,并且您只知道其中有一个您想要的文件,但您只能记住它的名称包含单词contract
.您有两个选择:
要么使用tar
和grep
列出 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*'
由您决定哪个更容易或最有用。
答案3
前几天,我试图从包含数千个文件的 tarball 中提取数百个文件。我需要的文件无法通过单个通配符引用。所以我用谷歌搜索并找到了这个页面。
然而,上述技巧似乎都不适合我的任务。我最终阅读了该男子,并找到了这个选项--files-from
,所以我的最终解决方案是
gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -
它就像一个魅力。
更新:列表文件的格式应与您在 中看到的格式相同tar -tvf
,否则您将无法提取任何文件。
答案4
如果您省略大括号,您的示例对我有用
$ tar --extract --file=test.tar.gz extract11
如果文件 extract11 位于子文件夹中,则应指定 tarball 中的路径。
$ tar --extract --file=test.tar.gz subfolder/extract11