如何使用tar命令创建/提取tar文件

tar命令用于将文件和目录打包并压缩为一个tar存档文件。它也可以提取tar存档/压缩包,显示存档/压缩包中包含的文件和目录的列表

8 min read
By myfreax
如何使用tar命令创建/提取tar文件

tar命令用于将文件和目录打包并压缩为一个tar存档文件。它也可以提取tar存档/压缩包,显示存档/压缩包中包含的文件和目录的列表,将其他文件添加到现有tar存档文件中,以及各种其他类型的操作。

tar支持种类繁多的压缩程序如gzipbzip2lziplzmalzopxzcompress。在创建压缩tar存档时,通常会使用压缩程序的名称作为后缀追加到tar存档文件名的末尾。这是一种公认​​的惯例,例如创建tar存档时使用了gzip压缩程序,则应将其命名为archive.tar.gz

Tar最初设计用于创建存档以在磁带上存储文件,这就是为什么它的名字叫Tape ARchive的原因。有两种版本的tar,BSD tarGNU tar,它们之间存在一些功能差异。大多数Linux系统都默认安装GNU tar

在本教程中,将说明如何创建/提取/解压缩tar存档/压缩包文件。包括tar命令语法选项,创建tar.gz存档/压缩包,创建tar.bz2存档/压缩包,列出存档/压缩包所有文件/目录,提取/解压tar存档/压缩包,提取tar.gz和tar.bz2存档/压缩包,从tar存档中提取指定文件,从Tar存档中删除文件,添加文件到tar存档。

tar命令语法

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

tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(s)]

OPERATION表示操作,tar命令的操作包括:-c/--create表示创建一个新的tar存档。-x/--extract表示从tar存档文件中中解压整个存档或提取一个或多个文件与目录。-t/--list表示显示tar存档中包含的文件/目录的列表。

OPTIONS表示选项,tar命令的选项包括:--verbose/-v表示打印tar命令正在处理的文件的信息,--file=archive=name/-f archive-name表示指定tar存档的文件名称。ARCHIVE_NAME表示要操作的tar存档的名称。FILE_NAME(s) 表示要提取的文件与目录,多个文件与目录以空格分隔。如果未提供,则解压整个存档。

在执行tar命令时,可以使用tar操作和选项的长短形式。长形式更易读,而短形式更方便。长形式选项以双短划线--开头。短形式选项以单个短划线-为开头,可以省略。

创建tar存档/压缩包

tar命令使用-c选项创建tar存档或和压缩包。例如,创建一个名为archive.tar存档文件,并打包文件file1file2file3。你运行以下命令:

tar -cf archive.tar file1 file2 file3

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

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

下面的例子将创建一个名为backup.tar的存档,并打包/home/username目录。

tar -cf backup.tar /home/username

在创建存档时,您可以打包一个或多个文件/目录。默认情况下,tar命令将递归目录的所有文件并创建存档。如果你指定了--no-recursion选项,tar命令将不会递归目录的所有文件。

如你需要查看tar命令打包过程可使用tar的-v选项可以查看正在处理的文件/目录。如果你想保留tar命令创建存档整个过程-v选项的输出可以将标准输出重定向到文件中,你将运行以下命令:

tar -cfv backup.tar /home/username > tar.log

tar命令的日志将写入到当前目录下的tar.log文件中。

创建tar.gz存档/压缩包

gzip是压缩tar文件最流行的压缩算法。使用gzip压缩tar存档时,存档名称应以tar.gz或者以tgz结尾。以下命令将打包文件file1file2archive.tar.gz 存档文件/压缩包中,并使用gzip进行压缩:

tar -czf archive.tar.gz file1 file2

-z选项告诉tar创建存档文件时使用在gzip压缩程序压缩存档。

创建tar.bz2存档/压缩包

压缩tar文件的另一种流行的程序是bzip2。使用bzip2压缩的存档,应使用tar.bz2tbz作为文件的扩展名。使用-j选项告诉tar命令使用bzip2程序压缩存档文件。以下命令将打包文件file1file2archive.tar.bz2存档文件/压缩包中,并使用bzip2进行压缩:

tar -cjf archive.tar.bz2 file1 file2

列出存档/压缩包所有文件/目录

要列出tar存档的所有文件/目录,请使用--list选项,短形式-t。以下命令将列出之前创建的archive.tar存档中的文件/目录:

tar -tf archive.tar

输出将如下所示:

file1
file2
file3

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

tar -tvf archive.tar

输出将如下所示:

-rw-r--r-- myfreax/users       0 2018-09-08 01:19 file1
-rw-r--r-- myfreax/users       0 2018-09-08 01:19 file2
-rw-r--r-- myfreax/users       0 2018-09-08 01:19 file3

提取/解压tar存档/压缩包

要提取tar存档,请使用--extract/-x选项并指定存档文件名。以下命令将解压/提取archive.tar的文件到当前目录中:

tar -xf archive.tar

可使用-v选项打印tar命令执行过程中正在处理的文件名称:

tar -xvf archive.tar

默认情况下,tar命令将存档内容提取/解压缩到当前工作目录中。可使用--directory/-C选项指定输出目录,tar命令将文件解压/提取到你指定的目录。例如,要将存档的文件提取到/opt/files目录。您将运行以下命令:

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

提取tar.gz和tar.bz2存档/压缩包

提取/解压缩tar.gz或者tar.bz2存档时,您不必指定解压缩选项。tar命令将根据存档文件的扩展名,使用指定的压缩程序解压/提取存档文件。

例如以下tar命令将自动指定使用的压缩程序,tar.gz将使用gzip压缩程序,tar.bz2将使用bzip2压缩程序。

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

从tar存档中提取指定文件

要从tar存档中提取指定的文件,请在存档名称之后指定要提取的文件名/目录,多个文件/目录使用空格进行分隔。

以下tar命令将从archive.tar存档文件提取file1 file2到当前工作目录:

tar -xf archive.tar file1 file2

提取文件时,必须提供相其确切的名称,即由使用--list/-t选项调用tar命令时输出的名称。以下命令将从archive.tar存档文件中提取多个目录。即dir1dir2

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命令:

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文档页面,如有疑问请在下方评论留言。