如何解压 tar.gz 文件

在本教程中,学习如何压缩、创建和提取 tar 文件。
663 位读者喜欢这篇文章。
4 manilla folders, yellow, green, purple, blue

Open Clip Art Library (公共领域). Jen Wike Huger 修改.

如果你使用开源软件,你很可能在某个时候遇到 .tar 文件。开源 tar 归档实用程序自 1979 年以来就存在了,因此在 POSIX 世界中它确实无处不在。它的目的是简单的:它将一个或多个文件“包装”到一个自包含的文件中,称为磁带归档文件,因为当 tar 发明时,它被用来将数据放在存储磁带上。

刚接触 tar 格式的人通常会将其等同于 .zip 文件,但 tar 归档文件特别地*不*进行压缩。 tar 格式仅创建文件的容器,但可以使用单独的实用程序压缩文件。应用于 .tar 文件的常见压缩方式是 Gzipbzip2xz。这就是为什么你很少只看到一个 .tar 文件,而更常见的是遇到 .tar.gz.tgz 文件。

安装 tar

在 Linux、BSD、Illumos 甚至 Mac OS 上,已经为你安装了 tar 命令。

在 Windows 上,处理 .tar 文件的最简单方法是安装 LGPL 开源的 7-Zip 实用程序。它的名称暗示它是一个 zip 实用程序,但它也适用于 tar 归档文件,甚至为 cmd 命令行界面提供命令。

如果你真的想要 Windows 上的实际 tar 实用程序,可以通过 Windows 10 上的 WSL 或通过 Cygwin 安装 GNU tar

创建 tarball

tar 归档文件通常被称为 tarball,大概是因为我们黑客喜欢尽可能地将单词缩短为尽可能少的音节,“tarball”比“tar 归档文件”更短且更容易。

在 GUI 中,创建一个 tarball 最多只需三个步骤。我正在使用 KDE,但在 Gnome 或 XFCE 上该过程基本上相同

  1. 创建一个目录
  2. 将你的文件放入目录中
  3. 右键单击目录并选择“压缩”

Creating a tarball

opensource.com

在 shell 中,它基本上是相同的过程。

要将一组文件收集到一个归档文件中,请将你的文件放在一个目录中,然后调用 tar,提供你要创建的归档文件的名称和你想要归档的目录

    $ tar --create --verbose --file archive.tar myfiles

tar 实用程序在命令中是独一无二的,因为它不需要在其短选项前面加破折号,从而允许高级用户缩写复杂的命令,例如

    $ tar cvf archive.tar myfiles

你不必在归档文件之前将文件放入目录中,但不这样做被认为是不礼貌的,因为没有人希望在他们解压目录时有 50 个文件散落在他们的桌面上。这些类型的归档文件有时被称为 tarbomb,尽管并非总是带有负面含义。 Tarbomb 对于补丁和软件安装程序很有用;这只是知道何时使用它们以及何时避免它们的问题。

压缩归档文件

创建 tar 归档文件不会压缩你的文件,它只是使它们更容易作为一个 blob 移动。 对于压缩,你可以让 tar 调用 Gzipbzip

    $ tar --create --bzip2 --file foo.tar.bz2 myfiles  
    $ tar --create --gzip --file foo.tar.gz myfiles

常见的扩展名是 tar.gz.tgz 用于 Gzipped tar 文件,.tbz.tar.bz2 用于 bzipped tar 文件。

提取归档文件

如果你从朋友或软件项目收到 tarball,你可以在你的 GUI 桌面或 shell 中提取它。在 GUI 中,右键单击你要提取的归档文件,然后选择“提取”。

Extracting an archive

opensource.com

Dolphin 文件管理器提供了一项功能,可以自动检测从归档文件中提取的文件是否包含在目录中,或者是否需要为它们创建一个新目录。 我使用此选项,以便当我从 tarbomb 中提取文件时,它们保持整洁和包含。

在 shell 中,提取归档文件的命令非常直观

    $ tar --extract --file archive.tar.gz

高级用户将其缩短为

    $ tar xf archive.tar.gz

你甚至可以使用 tar 实用程序来解压缩 .zip 文件

    $ tar --extract --file archive.zip

高级 tar

tar 实用程序非常强大且灵活。 一旦你熟悉了基础知识,探索其他功能会很有用。

将文件或目录添加到现有 tarball

如果你有一个现有的 tarball 并且想要向其中添加一个新文件,你不必解压所有内容来添加一个新文件。

大多数 Linux 和 BSD 桌面都带有一个图形归档实用程序。 使用它,你可以像打开任何其他目录一样打开 tar 归档文件,查看内部,提取单个文件,向其中添加文件,甚至预览它包含的文本文件和图像。

The Ark archive utility

opensource.com

在 shell 中,你可以将文件或目录添加到 tar 归档文件,只要它没有被压缩。 如果你的归档文件已被压缩,你必须解压缩它,但你不需要解压它。

例如,如果一个归档文件已使用 Gzip 压缩

    $ gunzip archive.tar.gz
    $ ls
    archive.tar

现在你有一个未压缩的 tar 归档文件,向其中添加一个文件和一个目录

    $ tar --append --file archive.tar foo.txt
    $ tar --append --file archive.tar bar/

更短的版本

    $ tar rf archive.tar foo.txt
    $ tar rf archive.tar bar/

查看 tarball 中的文件列表

要查看归档文件中的文件,无论是压缩还是未压缩,请使用 --list 选项

    $ tar --list --file archive.tar.gz  
    myfiles/
    myfiles/one
    myfiles/two
    myfiles/three
    bar/
    bar/four
    foo.txt

高级用户将其缩短为

    $ tar tf archive.tar.gz

仅提取一个文件或目录

有时你不需要归档文件中的所有文件,你只需要提取一两个文件。 在列出 tar 归档文件的内容之后,使用通常的 tar 提取命令以及你要提取的文件的路径

    $ tar xvf archive.tar.gz bar/four
    bar/four

现在文件“four”被提取到一个名为“bar”的新目录中。 如果“bar”已经存在,则将“four”放置在现有目录中。

提取多个文件或目录基本上是相同的

    $ tar xvf archive.tar.gz myfiles/one bar/four
    myfiles/one
    bar/four

你甚至可以使用通配符

    $ tar xvf archive.tar.gz --wildcards '*.txt'
    foo.txt

将 tarball 提取到另一个目录

之前,我提到过一些 tarball 是 tarbomb,会将文件分散在你的计算机上。 如果你列出一个 tar 归档文件,发现它的文件没有包含在一个目录中,你可以为它们创建一个目标目录

    $ tar --list --file archive.tar.gz
    foo
    bar
    baz
    $ mkdir newfiles
    $ tar xvf archive.tar.gz -C newfiles

这会将归档文件中的所有文件整齐地放入“newfiles”目录中。

目标目录选项的用途远不止是保持提取的文件整洁,例如,分发旨在复制到现有目录结构中的文件。 如果你正在处理一个网站并且想要向管理员发送一些新文件,你可以通过几种不同的方式来完成。 显而易见的方法是通过电子邮件将文件发送给站点管理员,并附带一些文本,解释每个文件应该放在哪里:“附加的 index.php 文件进入 /var/www/example.com/store,而 vouchers.php 文件进入 /var/www/example.com/deals...”

更有效的方式是创建一个 tar 归档文件

    $ tar cvf updates-20170621.tar.bz2 var
    var/www/example.com/store/index.php
    var/www/example.com/deals/voucher.php
    var/www/example.com/images/banner.jpg
    var/www/example.com/images/badge.jpg
    var/www/example.com/images/llama-eating-apple-pie.gif

给定此结构,站点管理员可以将你传入的归档文件直接提取到服务器的根目录。 tar 实用程序自动检测 /var/www/example.com 的存在,以及子目录 storedealsimages,并将文件分发到正确的目录中。 这是批量复制和粘贴,快速且容易地完成。

GNU tar 和 BSD tar

tar 格式只是一个格式,它是一个开放格式,因此可以由多个工具创建。

有两种常见的 tar 实用程序:默认安装在 Linux 系统上的 GNU tar 实用程序,以及默认安装在 BSD、Mac OS 和某些 Linux 系统上的 BSD tar 实用程序。 对于一般用途,任何一种 tar 都可以。 例如,本文中的所有示例在 GNU 或 BSD tar 上都以相同的方式工作。 但是,这两个实用程序确实有一些细微的差异,因此一旦你熟悉其中一个,你应该尝试另一个。

你可能必须手动安装“其他”tar(无论你的系统上是什么)。 为了避免实用程序之间的混淆,GNU tar 通常命名为 gtar,BSD tar 命名为 bsdtar,命令 tar 是一个符号链接,或者是一个 alias,指向预安装在你计算机上的那一个。

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算行业工作,通常同时进行。

5 条评论

这很好,也很全面,Seth。
需要指出的一点是,由于 .jpg 和 .png 文件已经压缩过,因此使用 gzip 不会获得太多压缩。 .mp3 和 .ogg 文件也出现类似情况。

好点子,Greg。 大约三年前,我做了一堆不同压缩方法的测试,这非常有趣,我很高兴看到各种文件如何进行压缩。 显然,正如你所说,那些已经压缩的文件不受影响,但是观察 wav 文件和文本文件如何缩小,取决于使用的方法,这总是非常吸引人的。

回复 Greg P

你好!
有趣的东西!!
基于此,我为西班牙语使用者写了一个西班牙语版本
- https://victorhckinthefreeworld.com/2017/07/04/como-descomprimir-un-arc…

我向作者、网站和原始链接致谢。

为了解压一个 tar 文件,我一直认为该命令应该是“untar”(西班牙语中的这个词的意思是“涂抹”,我知道这是个糟糕的笑话!:þ)

快乐黑客!

Bueno, gracias! 现在开始翻译 opensource.com 的其余部分 ;-)

干杯!

回复 ,作者:victorhck

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.