我应该查找文件是否使用 .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)