如何在 Linux 上从 .tar.gz 或 .tar.bz2 文件中提取文件
已发表: 2022-01-29Tar 文件是压缩档案。 在使用 Ubuntu 等 Linux 发行版甚至在 macOS 上使用终端时,您会经常遇到它们。 下面介绍如何提取或解压缩 tar 文件(也称为 tarball)的内容。
.tar.gz 和 .tar.bz2 是什么意思?
具有.tar.gz
或.tar.bz2
扩展名的文件是压缩存档文件。 只有.tar
扩展名的文件是未压缩的,但这种情况非常罕见。
文件扩展名的.tar
部分代表 tape ar cive ,这也是这两种文件类型都被称为 tar 文件的原因。 tar 文件的历史可以追溯到 1979 年,当时创建了tar
命令以允许系统管理员将文件存档到磁带上。 四十年后,我们仍在使用tar
命令将 tar 文件解压到硬盘上。 某个地方的某个人可能仍在使用tar
和磁带。
.gz
或.bz2
扩展后缀表示存档已被压缩,使用gzip
或bzip2
压缩算法。 tar
命令可以很好地处理这两种类型的文件,因此使用哪种压缩方法并不重要——而且它应该在您拥有 Bash shell 的任何地方都可用。 您只需要使用适当的tar
命令行选项。
从 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 命令压缩。 我们将使用-j
(bzip2) 选项,而不是使用-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
(parents) 选项使mkdir
创建所需的任何父目录,确保创建目标目录。
在提取 Tar 文件之前查看它们
到目前为止,我们刚刚迈出了信心的一步,并在看不见的情况下提取了文件。 您可能想在跳跃之前先看看。 您可以使用-t
(列表)选项在提取tar
文件之前查看它的内容。 通过less
命令管道输出通常很方便。
tar -tf ukulele_songs.tar.gz | 较少的
请注意,我们不需要使用-z
选项来列出文件。 我们只需要在从.tar.gz
文件中提取文件时添加-z
选项。 同样,我们不需要-j
选项来列出tar.bz2
文件中的文件。
滚动查看输出,我们可以看到 tar 文件中的所有内容都保存在一个名为 Ukulele Songs 的目录中,并且在该目录中,还有文件和其他目录。
我们可以看到 Ukulele Songs 目录包含名为 Random Songs、Ramones 和 Possibles 的目录。
要从 tar 文件中的目录中提取所有文件,请使用以下命令。 请注意,路径用引号引起来,因为路径中有空格。
tar -xvzf ukulele_songs.tar.gz "尤克里里歌曲/Ramones/"
要提取单个文件,请提供文件的路径和名称。
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"
您可以使用通配符提取选定的文件,其中*
表示任何字符串,而?
代表任何单个字符。 使用通配符需要使用--wildcards
选项。
tar -xvz --wildcards -f ukulele_songs.tar.gz "尤克里里歌曲/可能/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 命令 | ||
文件 | 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 ·查看·字符串·类型·重命名· zip ·解压缩· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice ·进度· strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑