有时看起来标准file
命令(我的 Ubuntu 系统上的 5.04)不够复杂(或者我只是使用错误,这很可能是)。
例如,当我在一个.exe
文件上运行它时,并且我非常肯定它包含一些存档,我希望输出如下所示:
$ improved-file foo.exe
foo.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
.zip archive included (just use unzip to extract)
其他事宜:
- 它不检测不同格式的串联
- 它不检测常见的文件格式,例如 .epub,它只是一个 .zip 容器,内部有一些标准化的 .xml 文件等(
file
显示“数据”)
一个此类 .exe 文件的示例包含存档 - 我猜测了一些存档格式,并使用反复试验方法尝试了相应的解包命令 - 最终奏效了 - 但我更喜欢更面向自动检查的工作流程。
答案1
我想不出一种一体化的工具,但有些程序可以处理给定类别的大量文件。
例如,p7zip可以识别大量存档格式,因此如果您怀疑某个文件是存档,请尝试7z l
对其进行运行。
$ 7z l ta12b563enu.exe
…
Type = Cab
Method = MSZip
…
如果您怀疑文件是图像,请尝试图像魔术师。
$ identify keyboard.jpg.gz
keyboard.jpg.gz=>/tmp/magick-XXV8aR5R JPEG 639x426 639x426+0+0 8-bit DirectClass 37.5KB 0.000u 0:00.000
对于音频或视频文件,请尝试mplayer -identify -frames 0
.
如果您发现无法识别的文件file
,您可以向你的魔法库的作者。
答案2
没有什么问题file
。它正在做它应该做的事情:根据文件中的规则检查文件magic(5)
。如果您希望提出一种通用方法来识别这些类型的文件,那么您可以提交新的魔术规则。阅读联机帮助页以magic
获取更多信息。
file
我怀疑永远不会做的一件事是“检测串联”。如果不扫描文件中的每个字节,就无法确定下一个段何时开始 - 有些事情file
不做,或者不想做。
顺便说一句,要区分 epub 文件,您需要检测它与 Ear 文件之间的差异,后者使用相同的基本结构。