我想解压一个文件,我写了这个命令:
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
和选项。)j
f
如果你想创建该文件的解压副本
如果要解压文件并将结果放在当前目录中,可以使用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 -l
、file
和检查文件readlink
,以查明它们是否是符号链接以及它们的直接目标是什么。
答案2
请注意,-f 标志还将强制 bzip2 处理符号链接:bunzip2 -f linux-source-4.15.0.tar.bz2