如何在 Linux 中使用 Tar 命令创建和提取存档

在本教程中,我们将通过实际示例和最常见的 tar 选项的详细说明来向您展示如何使用 tar 程序提取和创建 tar 存档。

什么是 tar ?

tar 命令用于通过将一组文件打包为一个 tar 文件。它还能够提取 tar 档案,显示 tar 文件中包含的文件列表,将其他文件添加到现有档案,以及各种其他类型的操作。

tar 支持种类繁多的压缩程序如 gzipbzip2lziplzmalzopxzcompress 。创建压缩 tar 档案时,将压缩器后缀附加到档案文件名是一种公认​​的惯例。例如,如果使用 gzip 压缩了存档,则应将其命名为 archive.tar.gz 。

Tar 最初设计是为了在磁带上存储文件而创建存档,这就是为什么它的名字叫“Tape  ARchive”。

有两种版本的 tar ,BSD tarGNU tar ,它们之间存在一些功能差异。大多数 Linux 系统默认都预装了 GNU tar 。

Tar 命令语法

在讨论如何使用 tar 命令之前,让我们先回顾一下基本语法。

tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(s)]
  • OPERATION - 只允许和需要一个操作参数。最常用的操作是:
    • --create(-c) - 创建一个新的 tar 存档。
    • --extract(-x) - 从存档中提取整个存档或一个或多个文件。
    • --list(-t) - 显示存档中包含的文件列表
  • OPTIONS - 最常用的操作是:
    • --verbose(-v) - 显示 tar 命令正在处理的文件。
    • --file=archive-name(-f archive-name) - 指定存档文件名。
  • ARCHIVE_NAME - 存档的名称。
  • FILE_NAME(s) - 要提取的以空格分隔的文件名列表。如果为空,则提取整个存档。

执行 tar 命令时,可以使用 tar 操作和选项的长或短形式。长形式更易读,而短形式写起来更快。长格式选项以双短划线(--)为前缀。短格式选项以单个短划线(-)为前缀,可以省略。

创建 Tar 存档

使用 -c 操作创建 tar 存档。例如,从指定的文件 file1file2file3 创建一个名为存档文件 archive.tar ,运行以下命令:

tar -cf archive.tar file1 file2 file3

以下是使用长格式选项的等效命令:

tar --create --file=archive.tar file1 file2 file3

下面的例子将从 /home/username 目录创建一个名为 backup.tar 的档案:

tar -cf backup.tar /home/username

您可以从一个或多个目录或文件的内容创建存档。默认情况下,除非 --no-recursion 指定了选项,否则目录将以递归方式存档。如果要查看正在处理的文件,请使用 -v 选项。

创建 Tar Gz 档案

Gzip 是压缩 tar 文件最流行的算法。使用 gzip 压缩 tar 存档时,存档名称应以 tar.gz 或者以 tgz 为扩展名。

要从给定的文件创建 tar.gz 存档,您可以使用以下命令:

tar -czf archive.tar.gz file1 file2

选项 -z 告诉 tar 在创建时使用 gzip 算法压缩存档。

创建 Tar Bz2 档案

压缩 tar 文件的另一种流行算法是 bzip2 。当用 bzip2 压缩的 tar 档案存档名称应使用 tar.bz2tbz 作为扩展名。

当指定 -j 选项时 tar 会使用 bzip2 算法来压缩归档文件。

以下命令将 tar.bz2 根据给定文件创建存档:

tar -cjf archive.tar.bz2 file1 file2

查看 Tar 档案

要列出 tar 存档中的内容,请使用 --list(-t) 操作。

tar -tf archive.tar
file1
file2
file3

如果使用 --verbose(-v) 选项列出存档的内容, tar 将打印更多信息,例如所有者,文件大小,时间戳等 :

tar -tvf archive.tar
-rw-r--r-- linuxize/users       0 2018-09-08 01:19 file1
-rw-r--r-- linuxize/users       0 2018-09-08 01:19 file2
-rw-r--r-- linuxize/users       0 2018-09-08 01:19 file3

提取 Tar 档案

要提取 tar 存档,请使用 --extract(-x) 选项并指定存档文件名:

tar -xf archive.tar

添加 -v 选项以打印要提取的文件的名称也很常见。

tar -xvf archive.tar

默认情况下, tar 将提取当前工作目录中的存档内容。使用 --directory(-C) 提取到特定目录中的存档文件:

例如,要将存档内容提取到 /opt/files 目录,您可以使用:

tar -xf archive.tar -C /opt/files

提取 Tar Gz 和 Tar Bz2 档案

提取 tar.gz 或者 tar.bz2 压缩档案时,您不必指定解压缩选项。该命令与提取 tar 存档时的命令相同:

tar -xf archive.tar.gz
tar -xf archive.tar.bz2

从 Tar 存档中提取特定文件

要从 tar 存档中提取特定文件,请在存档名称后附加以空格分隔的文件名列表:

tar -xf archive.tar file1 file2

提取文件时,必须提供其确切的名称,包括由 --list(-t) 打印的路径。

从存档中提取一个或多个目录与提取文件相同:

tar -xf archive.tar dir1 dir2

如果您尝试提取不存在的文件,将显示类似于以下内容的错误消息:

tar -xf archive.tar README
tar: README: Not found in archive
tar: Exiting with failure status due to previous errors

使用通配符从 Tar 存档中提取文件

要基于通配符模式从存档中提取文件,请使用 --wildcards 选项并用引号包含模式以防止 shell 解释它。

例如,要提取名称以 .js(Javascript文件) 结尾的文件,您可以使用:

tar -xf archive.tar --wildcards '*.js'

将文件添加到现有的 Tar 存档

要将文件或目录添加到现有 tar 存档,请使用 --append(-r) 操作。

例如,要添加名为 newfile 的文件到 archive.tar  ,您可以使用:

tar -rvf archive.tar newfile

从 Tar 存档中删除文件

使用 --delete 操作从存档中删除文件。

例如,要从 archive.tar 中删除以 file1 命名的文件,您可以使用:

tar --delete -f archive.tar file1

结论

到目前为止,您应该很好地了解如何创建和提取 tar 档案。有关 tar 命令的更多信息,请参阅 Gnu tar 文档页面