【问题标题】:Extract 1 file from tar.gz with bash使用 bash 从 tar.gz 中提取 1 个文件
【发布时间】:2011-03-29 01:22:09
【问题描述】:

是否可以以编程方式从大小合适的 .tar.gz 中提取单个文件,而无需将整个 tarball 提取到磁盘?本质上,我需要通过网络进入大型 tar.gz 文件并提取 1 个小文本文件。将 tarball 提取并提取到磁盘,然后将文件拉出,然后删除其他所有内容似乎有些过头了。此外,我将递归地执行此操作(例如,包依赖项,每个文本文件指向更多的 tar.gz),因此我可以摆脱的网络流量和 CPU 周期越少越好。

【问题讨论】:

  • 不,它与 bash 相关。 bash 是编程(有点)。
  • @Matt Joiner:这与 bash 无关。这是一个可以从任何 shell 调用的通用系统实用程序的使用问题,而不仅仅是 bash。但是,是的,使用 bash 编程确实是程序,尽管您有时可能在这里听说过。
  • 是的,我想到了 SU,但它在一个相对复杂的 bash 脚本中,并且它将通过机器而不是由用户运行,所以我认为它比 SU 更 SO。跨度>
  • 好吧,我个人不介意;不打算开始十字军东征或任何事情。但是我已经看到更多与编程相关的问题迁移到了 SU。 (实际上,尽管您将它用于编程,但答案并不依赖于此。)哦,好吧。代表我!
  • 好点。我真的不介意,我就是这么看的。

标签: linux bash gzip tar


【解决方案1】:

从手册页中,从 foo.tar.gz 中提取 blah.txt:

tar -xzf foo.tar.gz blah.txt

(当然,这需要超级用户进行,但是嘿,及时的答案也很好。)

【讨论】:

  • 如果文件位于 tar.gz 结构内的子目录中,这会起作用吗?
  • 使用现代版本的 GNU tar,您不必在提取时指定 'z' 选项 - 它会自行推断(同样使用 bzip2 压缩文件的 'j' 选项)。创建文件时,您确实需要告诉 tar 要创建什么的选项 - 因此对称性不会造成任何损害。
  • @tj111:如果tar文件中的文件名是xyz/pqr/abc.txt,那就是你在命令行中指定的。您也可以使用 shell 样式的元字符:xyz/pqr/* 将提取 xyz/pqr 下所有子目录中的所有文件。请注意 shell 是否会为您扩展 '*' - 使用引号来阻止它。
  • @tj111:是的,当然。它将创建目录来保存单个文件。
  • @Jonathan Leffler:是的,是的;我想过这个问题,但我想我会从字面上引用手册页。
【解决方案2】:

我回应 Jefromi 的回答,如果您在 tar 文件中有目录,则添加文件的路径(这对某些人来说似乎很明显,但我最初并不清楚如何指定目录结构) .

例如,如果您在 src/ 目录下进行了 tar,并且 blah.txt 在 release1/shared/ 下,您将返回 src/ 目录(如果您希望在同一位置解压)

tar -xzf tar.gz release1/shared/blah.txt

如果你不记得你的 tar 文件的目录结构(我有点杂乱无章,有时会忘记我在哪里做了 tar),你总是可以

tar -tzf tar.gz

要查看内容,在了解目录结构后取消 (Ctrl+C)。

【讨论】:

  • 谢谢。尽管看起来您需要在目录前面加上./,无论出于何种原因扫描它们。例如tar -xzf tar.gz ./release1/shared/blah.txt
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2012-05-12
  • 2013-11-27
相关资源
最近更新 更多