如何在 Linux 上从 .tar.bz2 或 .tar.gz 文件中提取文件
以下是有关在 Linux 上解压文件所需了解的所有信息
要点
- Tar 文件是 Linux 发行版(如 Ubuntu)中使用的压缩档案。可以使用终端中的 tar 命令提取它们。
- .tar.gz 和 .tar.bz2 扩展名表示 tar 文件是使用 gzip 或 bzip2 压缩算法压缩的。
- 从 tar 文件中提取文件可以使用 tar 命令和选项 -x、-v 以及 -z (.gz) 或 -j (bz2)(具体取决于压缩类型)来完成。可以使用 -C 选项将提取的文件定向到特定目录。
Tar 文件是压缩档案。在使用 Ubuntu 等 Linux 发行版甚至在 macOS 上使用终端时,您会经常遇到它们。下面介绍如何提取或解压 tar 文件(也称为 tarball)的内容。
.tar.gz 和 .tar.bz2 是什么意思?
具有 .tar.gz
或 .tar.bz2
扩展名的文件是压缩存档文件。仅具有 .tar
扩展名的文件是未压缩的,但这种情况非常罕见。
文件扩展名的 .tar
部分代表 tape archive,这就是这两种文件类型被称为 tar 文件的原因。 Tar 文件的历史可以追溯到 1979 年,当时创建了 tar
命令,以允许系统管理员将文件归档到磁带上。四十年后,我们仍在使用 tar
命令将 tar 文件提取到硬盘上。某个地方的某人可能仍在使用 tar
和磁带。
.gz
或 .bz2
扩展后缀表示存档已使用 gzip
或 bzip2
进行压缩压缩算法。 tar
命令可以很好地处理这两种类型的文件,因此使用哪种压缩方法并不重要 - 并且它应该在任何有 Bash shell 的地方都可用。您只需使用适当的 tar
命令行选项即可。
值得注意的是,本文中的所有内容也适用于 Linux 的 Windows 子系统,它允许您在 Windows 10 或 Windows 11 中安装 Bash shell,尽管在 Windows 上还有其他方法打开 tar.gz 文件。
文件类型
Extension
DAT·7Z·BZ2·XML·RTF·XLSX·WEBP·EPUB·MP4·M4A·AVI·MOBI·SVG·MP3·REG·PHP·LOG >·PPTX·PDF·MPEG·WMA·M4V· >AZW·LIT·TAR·TAR.GZ·RAR
从 Tar 文件中提取文件
假设您下载了两个乐谱文件。一个文件名为 ukulele_songs.tar.gz
,另一个文件名为 guitar_songs.tar.bz2
。这些文件位于下载目录中。
让我们提取(有时也称为“untar”而不是提取)尤克里里歌曲:
tar -xvzf ukulele_songs.tar.gz
提取文件后,它们会在终端窗口中列出。
我们使用的命令行选项是:
- -x:从 tar 文件中提取、检索文件。
- -v:详细,列出正在提取的文件。
- -z:Gzip,使用gzip解压tar文件。
- -f:文件,我们希望
tar
使用的 tar 文件的名称。该选项后面必须跟有 tar 文件的名称。
使用 ls 列出目录中的文件,您将看到已创建一个名为 Ukulele Songs 的目录。提取的文件位于该目录中。这个目录是从哪里来的呢?它包含在 tar
文件中,并与文件一起提取。
现在让我们提取吉他歌曲。为此,我们将使用与之前几乎完全相同的命令,但有一个重要的区别。 .bz2
扩展后缀告诉我们它已使用 bzip2 命令进行压缩。我们将使用 -j
(bzip2) 选项来解压缩 bz2 文件,而不是使用 -z
(gzip) 选项。
tar -xvjf guitar_songs.tar.bz2
再次,文件在提取时会列在终端上。需要明确的是,我们在 .tar.bz2
文件中使用 tar
的命令行选项是:
- -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
(父目录)选项使 mkdir
创建所需的任何父目录,确保创建目标目录。
在提取 Tar 文件之前查看其内部
到目前为止,我们只是大胆地提取了看不见的文件。你可能想在行动之前先看看。在解压 tar
文件之前,您可以使用 -t
(列表)选项查看该文件的内容。通过 less 命令来管道输出通常很方便。
tar -tf ukulele_songs.tar.gz | less
请注意,我们不需要使用 -z
选项来列出文件。当我们从 .tar.gz
文件中提取文件时,我们只需要添加 -z
选项。同样,我们不需要 -j
选项来列出 tar.bz2
文件中的文件。
滚动浏览输出,我们可以看到 tar 文件中的所有内容都保存在名为 Ukulele Songs 的目录中,并且在该目录中还有文件和其他目录。
我们可以看到 Ukulele Songs 目录包含名为 Random Songs、Ramones 和 Maybes 的目录。
要从 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
选项需要一个数字参数。该数字表示要忽略的目录级别。仍会提取被忽略目录中的文件,但目录结构不会复制到硬盘驱动器上。
如果我们在示例 tar 文件中指定 --strip-components=1
,则 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
文件中提取文件,我们只需要记住其中的几个选项即可。
Linux Commands | ||
Files | tar·pv·cat·tac·chmod·grep ·diff·sed·ar·man·pushd·popd·fsck·testdisk·seq·fd·pandoc·cd·$PATH·awk·join·jq·fold·uniq·journalctl·tail·stat·ls·fstab·echo·less·chgrp·chown·rev·look·strings·type·rename·zip·unzip·mount·umount·install·fdisk·mkfs·rm·rmdir·rsync·df·gpg·vi·nano·mkdir·du·ln·patch·convert·rclone·shred·srm·scp·gzip·chattr·cut·find·umask·wc· tr | |
Processes | alias·screen·top·nice·renice·progress·strace·systemd·tmux·chsh·history·at·batch·free·which·dmesg·chfn·usermod·ps·chroot·xargs·tty·pinky·lsof·vmstat·timeout·wall·yes·kill·sleep·sudo·su·time·groupadd·usermod·groups·lshw·shutdown·reboot·halt·poweroff·passwd·lscpu·crontab·date·bg·fg·pidof·nohup·pmap | |
Networking | netstat·ping·traceroute·ip·ss·whois·fail2ban·bmon·dig·finger·nmap·ftp·curl·wget·who·whoami·w·iptables·ssh-keygen·ufw·arping·firewalld |