从存档中提取精确文件的快速方法
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.sql
和baz
:
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 通配符匹配会在某些时候出现问题。也许不是今天,但是...以上是关于从存档中提取精确文件的快速方法的主要内容,如果未能解决你的问题,请参考以下文章