如何解压 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/storevouchers.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 是一个符号链接或 别名,指向预安装在您计算机上的那个。

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

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.