Tar 文件是压缩档案。在使用 Ubuntu 等 Linux 发行版时,甚至在 macOS 上使用终端时,您会经常遇到它们。下面介绍如何提取(或解压缩)tar 文件(也称为 tarball)的内容。
.tar.gz 和 .tar.bz2 是什么意思?
具有.tar.gz
或.tar.bz2
扩展名的文件是压缩存档文件。只有.tar
扩展名的文件是未压缩的,但这种情况非常少见。
.tar
文件扩展名部分代表tape ar chive ,这也是这两种文件类型都称为 tar 文件的原因。Tar 文件的历史可以追溯到 1979 年,当时创建该命令以允许系统管理员将文件存档到磁带上。四十年后,我们仍在使用该命令将tar 文件提取到我们的硬盘上。某个地方的某个人可能仍在使用磁带。tar
tar
tar
或 扩展后缀表示存档已被压缩,使用或.gz
压缩算法。该命令可以很好地处理这两种类型的文件,因此无论使用哪种压缩方法都没有关系——它应该在任何有 Bash shell 的地方都可用。您只需要使用适当的 命令行选项。.bz2
gzip
bzip2
tar
tar
值得注意的是,本文中的所有内容也适用于 Linux 的 Windows 子系统,它允许您在 Windows 10或Windows 11中安装 Bash shell,尽管还有其他方法可以在 Windows 上打开 tar.gz 文件。
从 Tar 文件中提取文件
假设您下载了两个乐谱文件。一个文件称为ukulele_songs.tar.gz
,另一个称为guitar_songs.tar.bz2
. 这些文件位于下载目录中。
让我们提取四弦琴歌曲:
tar -xvzf ukulele_songs.tar.gz
提取文件时,它们会列在终端窗口中。
我们使用的命令行选项是:
- -x:提取,从 tar 文件中检索文件。
- -v:详细,列出正在提取的文件。
- -z : Gzip,使用gzip解压tar文件。
- -f:文件,我们要使用的 tar 文件的名称
tar
。此选项后必须跟有 tar 文件的名称。
列出目录中的文件,ls
您会看到已创建一个名为 Ukulele Songs 的目录。提取的文件位于该目录中。这个目录是从哪里来的?它包含在tar
文件中,并与文件一起提取。
现在让我们提取吉他歌曲。为此,我们将使用与之前几乎完全相同的命令,但有一个重要区别。.bz2
扩展后缀告诉我们它已经使用 bzip2 命令进行了压缩。-z
我们将使用-j
(bzip2)选项,而不是使用(gzip) 选项。
tar -xvjf guitar_songs.tar.bz2
文件在提取时再次列在终端上。明确地说,我们tar
为该.tar.bz2
文件使用的命令行选项是:
- -x:从 tar 文件中提取、检索文件。
- -v:详细,列出正在提取的文件。
- -j : Bzip2,使用bzip2解压tar文件。
- -f:文件,我们希望 tar 使用的 tar 文件的名称。
如果我们列出下载目录中的文件,我们将看到已创建另一个名为 Guitar Songs 的目录。
选择将文件提取到的位置
如果我们想将文件解压到当前目录以外的位置,我们可以使用-C
(指定目录)选项指定目标目录。
tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/
查看我们的 Documents/Songs 目录,我们会看到 Guitar Songs 目录已经创建。
注意目标目录必须已经存在,不存在tar
则不会创建。如果您需要创建一个目录并将tar
文件全部提取到一个命令中,您可以按如下方式进行:
mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/
( -p
parents) 选项导致mkdir
创建所需的任何父目录,确保创建目标目录。
在提取 Tar 文件之前查看它们
到目前为止,我们只是大胆尝试并提取了看不见的文件。你可能想在你跳跃之前先看看。您可以在使用(list) 选项tar
提取文件之前查看文件的内容。通过命令管道输出-t
通常很方便。less
tar -tf ukulele_songs.tar.gz | less
请注意,我们不需要使用该-z
选项来列出文件。我们只需要在从文件中提取文件-z
时添加该选项。同样,我们不需要列出文件中文件的选项。.tar.gz
-j
tar.bz2
滚动查看输出,我们可以看到 tar 文件中的所有内容都保存在一个名为 Ukulele Songs 的目录中,在该目录中,有文件和其他目录。
我们可以看到 Ukulele Songs 目录包含名为 Random Songs、Ramones 和 Possibles 的目录。
要从 tar 文件中的目录中提取所有文件,请使用以下命令。请注意,路径用引号括起来,因为路径中有空格。
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"
要提取单个文件,请提供文件的路径和名称。
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"
您可以使用通配符提取选定的文件,其中*
代表任意字符串,?
代表任意单个字符。使用通配符需要使用--wildcards
选项。
tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"
提取文件而不提取目录
如果您不想在您的硬盘驱动器上重新创建 tar 文件中的目录结构,请使用该--strip-components
选项。该--strip-components
选项需要一个数字参数。该数字表示要忽略多少级目录。忽略目录中的文件仍会被提取,但目录结构不会复制到您的硬盘上。
如果我们--strip-components=1
使用我们的示例 tar 文件指定,则不会在硬盘驱动器上创建 tar 文件中的 Ukulele Songs 最顶层目录。将提取到该目录的文件和目录提取到目标目录中。
tar -xvzf ukulele_songs.tar.gz --strip-components=1
我们的示例 tar 文件中只有两层目录嵌套。因此,如果我们使用--strip-components=2
,所有文件都将提取到目标目录中,并且不会创建其他目录。
tar -xvzf ukulele_songs.tar.gz --strip-components=2
如果您查看 Linux 手册页,您会发现它tar
一定是“具有最多命令行选项的命令”标题的理想候选者。值得庆幸的是,为了允许我们从中提取文件.tar.gz
和tar.bz2
具有良好粒度控制的文件,我们只需要记住这些选项中的一小部分。
原创文章,作者:哦八卦,如若转载,请注明出处:https://www.obagua.com/14945.html