使用tar命令解压缩/提取文件

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

7 min read
By myfreax
使用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 [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存档或和压缩包。在创建存档时,您可以打包一个或多个文件/目录。默认情况下,tar命令将递归目录的所有文件并创建存档。

如果你指定了--no-recursion选项,tar命令将不会递归目录的所有文件。

命令tar -cf archive.tar file1 file2 file3,创建一个名为archive.tar存档文件,并打包文件file1file2file3

这是使用长形式选项的等效命令tar --create --file=archive.tar file1 file2 file3

命令tar -cf backup.tar /home/username将创建一个名为backup.tar的存档,并打包/home/username目录。

如你需要查看tar命令打包过程可使用tar-v选项,可以查看正在处理的文件/目录。

如果你想保留tar命令创建存档整个过程的输出,可以将-v选项的标准输出重定向到文件中。

例如命令tar -cfv backup.tar /home/username > tar.log。将tar -v选项的标准输出写入到当前目录下的tar.log文件中。

在创建存档tar文件时,你可以指定压缩的程序。gzip是压缩tar文件最流行的压缩算法。使用gzip压缩tar存档时,存档名称应以tar.gz或者以tgz结尾。

tar -czf archive.tar.gz file1 file2

命令将打包文件file1file2archive.tar.gz 存档文件/压缩包中,并使用gzip进行压缩。-z选项告诉tar创建存档文件时使用在gzip压缩程序压缩存档。

压缩tar文件的另一种流行压缩的程序是bzip2。使用bzip2压缩的存档,应使用tar.bz2tbz作为文件的扩展名。

tar -cjf archive.tar.bz2 file1 file2

命令将打包文件file1file2archive.tar.bz2存档文件/压缩包中,并使用bzip2进行压缩。使用-j选项告诉tar使用bzip2程序压缩存档文件。

列出存档文件内容

如果你想在不解压缩tar存档文件内容情况查看tar包含的文件与目录,可以使用tar的--list选项或者短形式-t选项列出tar存档的所有文件/目录。

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

以下tar命令将列出之前创建的archive.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选项并指定存档文件名。你可使用-v选项打印tar执行过程中正在处理的文件名。

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

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

例如以下tar命令将自动指定使用的压缩程序,tar.gz将使用gzip压缩程序,tar.bz2将使用bzip2压缩程序,将存档的文件提取到/opt/files目录。

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

提取指定文件

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

你也可使用基于通配符模式从存档中提取文件,在使用通配符模式时请使用--wildcards选项并使用单引号转义,以防止shell程序解释它。

还有一点就是在提取指定的文件时,必须提供文件确切的名称以及在tar存档内的路径,你可以使用tar命令--list/-t选项找到文件在tar存档名称与路径。

如果您尝试提取不存在的文件,将显示类似于Not found in archiveExiting with failure status due to previous errors错误消息。

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

tar -xf archive.tar systemd/system/v2ray.service

例如,要提取名称以.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文档页面,如有疑问请在下方评论留言。