从存档中提取精确文件的快速方法

Posted

技术标签:

【中文标题】从存档中提取精确文件的快速方法【英文标题】:Fast way to extract exact file from archive 【发布时间】:2014-07-10 19:30:24 【问题描述】:

我目前正在使用此命令从存档中仅提取 1 个 .sql 文件

tar xzvf *.gz *.sql

它位于 .tar.gz 内的第一层。喜欢:

archive.tar.gz bla.sql 文件夹 ...

但似乎这个命令会扫描整个 tar.gz 并且需要很长时间。

有什么快速的方法吗?有什么建议吗?

【问题讨论】:

.tar.gz 文件是 gzip 压缩的连续数据流。如果要从中获取单个文件,则必须解压缩所有内容(您无法提前知道特定文件在流中的位置) 该命令不提取“仅 1 个 .sql 文件”...通配符在 tar 甚至开始之前展开,因此该命令的结果高度依赖于您当前的内容目录。你最终可能会运行tar xzvf foo.gz test.tar.gz blah.gz really_goofy.tar.cpio.gz test.sql blah.sql foo.sql goober.sql - 这可能不是你想要的...... 【参考方案1】: archive.tar.gz bla.sql 文件夹 ...

如果您只想提取 bla.sql,只需在参数中添加文件的完整路径(到存档中):

tar xvf archive.tar.gz bla.sql

另一个例子:

test.tar.gz foo.sql 文件夹 bar.sql 巴兹

如果要提取foo.sqlbaz

tar xvf test.tar.gz foo.sql Folder/baz

如果要提取所有.sql 文件:

tar xvf test.tar.gz --wildcards "*.sql"

【讨论】:

您可能需要添加引号:'*.sql'。否则,shell会在参数传递给tar之前进行扩展。 你说得对,我编辑了我的答案。但是,我尝试了这些命令,一切正常(使用 GNU bash 4.3 和 tar 1.27) 它们之所以有效,是因为您在当前目录中没有任何 .sql 文件。 糟糕,我忘记了这个案例。谢谢! 可能还想明确命名存档文件,以防有多个匹配项:tar xzvf archive.tar.gz bla.sql。否则,shell 通配符匹配会在某些时候出现问题。也许不是今天,但是...

以上是关于从存档中提取精确文件的快速方法的主要内容,如果未能解决你的问题,请参考以下文章

使用帧之间的相位变化从 FFT Bins 中提取精确频率

尝试从两列中提取多条记录时,精确提取返回的行数超过了请求的行数

一种精确从文本中提取URL的思路及实现

在交互式绘图中提取鼠标点击的精确坐标

三种方法使用FFmpeg截取视频片断

excel怎么用身份证号算员工精确到天数的年龄