.bz2 和 .tar.bz2 文件之间的区别

.bz2 和 .tar.bz2 文件之间的区别

我应该查找文件是否使用 .bz2 或 .tar.bz2 压缩(不使用文件扩展名)并相应地解压缩。我使用了该file命令,但它对 .bz2 和 .tar.bz2 给出了相同的结果。请建议一种方法来明确识别 .bz2 和 .tar.bz2 文件。

答案1

运行文件并将bzcat结果通过管道传输到file

$ bzcat somefile.bz2 | file -
/dev/stdin: data               # or whatever; this is not a .tar.bz2

$ bzcat otherfile.bz2 | file -
/dev/stdin: POSIX tar archive  # this *is* a .tar.bz2

答案2

file不会关心:它看着格式,不是文件名

tar 格式的内容只能通过解压缩文件才能看到。

答案3

file如果您有支持-z或选项的版本-Z,则可以使用其中任何一个来尝试查看压缩文件的内部以找出它们是什么。

这两个选项都不属于 POSIX 规范的一部分文件

然而,该-z选项已经在 BSDfile命令中存在了很长一段时间,至少从 2000 年代初开始(我的系统上的更改日志在 2003 年之前没有显示任何内容)。 -Z于 2015 年 6 月添加。file当前许多系统都使用 BSD,包括大多数(全部?)Linux 发行版、*BSD 和 Mac OSX。

man file

-z, --解压缩

尝试查看压缩文件的内部。

-Z, --uncompress-noreport

尝试查看压缩文件的内部,但仅报告有关内容的信息,而不报告压缩的信息。

例如:

# make a .tar.bz2 file
tar cfj test.tar.bz2 *

# make a .bz2 file
echo junk | bzip2 -c > junk.bz2

# try to fool `file`
cp test.tar.bz2 test.bz2
cp junk.bz2 junk.tar.bz2

echo "file -z:"
file -z *.bz2

echo
echo

echo "file -Z:"
file -Z *.bz2

输出:

file -z:
junk.bz2:     ASCII text (bzip2 compressed data, block size = 900k)
junk.tar.bz2: ASCII text (bzip2 compressed data, block size = 900k)
test.bz2:     POSIX tar archive (GNU) (bzip2 compressed data, block size = 900k)
test.tar.bz2: POSIX tar archive (GNU) (bzip2 compressed data, block size = 900k)


file -Z:
junk.bz2:     ASCII text
junk.tar.bz2: ASCII text
test.bz2:     POSIX tar archive (GNU)
test.tar.bz2: POSIX tar archive (GNU)

相关内容