使用 bunzip2 解压缩文件

使用 bunzip2 解压缩文件

我想解压一个文件,我写了这个命令:

bunzip2 linux-source-4.15.0.tar.bz2

我得到了这个:

bunzip2: Input file linux-source-4.15.0.tar.bz2 is not a normal file.

我想知道具体问题是什么。

我运行了文件linux-source-4.15.0.tar.bz2并得到:

linux-source-4.15.0.tar.bz2: symbolic link to linux-source-4.15.0/linux-source-4.15.0.tar.bz2

答案1

总结:您可以使用 提取整个档案tar xf

正如 Rinzwind 提到的,bunzip2不幸的是,它拒绝对符号链接进行操作。输出file显示您的.bz2文件是符号链接,而不是常规文件。

如何解压文件取决于你具体想做什么。考虑到你正在操作的特定文件,你的bunzip2命令很可能不会完全按照你的要求执行,你应该使用 来提取它tar

如果你想解压 tar 档案本身

您的.tar.bz2文件是一个使用 bzip2 压缩的 tar 存档。您询问了如何解压该文件,然后执行(见下文)。但是,如果您这样做,结果将是一个未压缩的档案,您很可能希望提取其中的内容。

tar命令用于创建和提取 tar 存档,它本身可以处理压缩。您可以像提取未压缩的 tar 存档一样从此压缩存档中提取文件,因为它会tar自动检测和处理压缩:

tar xf linux-source-4.15.0.tar.bz2

您可能希望以自己的非 root 用户身份提取文件,如果您将其放在您有写入权限的地方,则可以这样做。如果这是您想要的,我建议转到目标并通过提供其完整路径来提取它。对于该文件,这可能是:

tar xf /usr/srclinux-source-4.15.0.tar.bz2

如果要tar在提取每个文件时列出它,请添加以下v选项:

tar xvf linux-source-4.15.0.tar.bz2

如果由于某种原因,您想要tar明确地告诉您提取的档案是 bzip2 压缩的,您可以通过添加以下j选项来实现:

tar xvjf linux-source-4.15.0.tar.bz2

(无论选项后面的路径是绝对路径还是相对路径,您都可以使用v和选项。)jf

如果你想创建该文件的解压副本

如果要解压文件并将结果放在当前目录中,可以使用bzcat -d并重定向结果:

bzcat -d linux-source-4.15.0.tar.bz2 >linux-source-4.15.0.tar

如果你想更换目标使用解压后的文件

如果你想解压目标符号链接,将其替换为原始(未压缩)文件,然后您可以使用realpath来取消引用符号链接。在这种情况下,我非常怀疑您是否想要这样做,但以下是它的样子,以供将来参考:

bunzip2 "$(realpath linux-source-4.15.0.tar.bz2)"

或者只是找到目标并将其传递给bunzip2,因为在执行删除符号链接并将其替换为其他内容的操作之前,您一定要检查符号链接的目标是什么(以防您弄错了,目标不是您认为的那样/位置)。要找到目标,您可以realpath单独运行该命令:

realpath linux-source-4.15.0.tar.bz2

当然,您也可以使用ls -lfile和检查文件readlink,以查明它们是否是符号链接以及它们的直接目标是什么。

答案2

请注意,-f 标志还将强制 bzip2 处理符号链接:bunzip2 -f linux-source-4.15.0.tar.bz2

相关内容