如何解压 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(tar包),大概是因为我们黑客喜欢将单词缩短到尽可能少的音节,而“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(tar炸弹),尽管并非总是带有负面含义。 Tar炸弹对于补丁和软件安装程序很有用; 只是要知道何时使用它们以及何时避免使用它们。

压缩归档文件

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

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

常见的扩展名是 tar.gz.tgz 用于 Gzip 压缩的 tar 文件,.tbz.tar.bz2 用于 bzip 压缩的 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 是 tar 炸弹,它们会将文件散落在您的计算机上。 如果您列出一个 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 实用程序:GNU tar 实用程序,默认安装在 Linux 系统上,以及 BSD tar 实用程序,默认安装在 BSD、Mac OS 和某些 Linux 系统上。 对于一般用途,任何一种 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 文件和文本文件如何根据使用的方法缩小,这总是令人着迷。

回复 by Greg P

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

我向作者、网站提供了署名,并提供了原始链接。

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

黑客愉快!

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

干杯!

回复 by victorhck

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