我想检查某些文件,看看它们的类型和扩展名是否匹配。我目前正在做的是使用file命令检查 mime 类型 (或来自file的基本输出) 并将其与文件扩展名进行比较。但是,某些文件类型返回相同的 mime 类型,例如.sfx和.dll。
另外我有一些文件与没有扩展名在所有,我应该能够正确地确定它们的文件类型。
我希望能够正确获取所有文件类型,但我目前感兴趣的最重要的文件类型是;
dll
msi
com
cpl
exe
ocx
tmp
upd
是否有任何其他工具检查并返回文件的类型?
EDIT我写了一个可以用作 linux 命令的 nodejs 脚本,我已经通过合并公共数据库创建了自己的文件签名数据库,每个文件扩展名的格式如下;
"ISO" : [
{
"signature": "4344303031", // byte sequence
"size": 5, // size of byte sequence
"offset": 32769 // offset in the file for the signature bytes
},
{
"signature": "4344303031",
"size": 5,
"offset": 34817
},
{
"signature": "4344303031",
"size": 5,
"offset": 36865
}
]
现在;我首先检查文件名中可用扩展名的签名字节(text.iso 将导致.iso),然后我去检查该文件的签名字节,看看它是否真的是一个 iso 文件。
如果它不是 iso,我检查所有的签名字节序列的每个扩展,我在我的数据库对给定的文件,看看是否有任何匹配。
如果我找不到匹配,我执行文件命令,获取文件的 mime 类型,并使用我创建的另一个 db 匹配 mime 类型与扩展,看看是否有匹配。
"application/atom+xml": [
"atom",
"xml"
],
"application/atomcat+xml": [
"atomcat"
],
"application/atomsvc+xml": [
"atomsvc"
]
这个解决方案目前满足我的项目的需求。也许这可能会帮助别人。
在pip install filemagic
之后使用 Python:
>>> import magic
>>> with magic.Magic() as m: m.id_filename('tmp.py')
...
'Python script, ASCII text executable'
>>> with magic.Magic() as m: m.id_filename('test.html')
...
'HTML document, ASCII text'
Linux 有一个内置的file
命令:man file
Windows 和 * nix 之间的主要区别在于 DOS / Windows 对文件后缀具有内置依赖项。例如,可执行文件必须命名为“.exe”(或.com);.bat 文件必须命名为“.bat”(或.cmd)。
Linux,MacOS,BSD 等没有这样的限制。相反,它们必须具有“执行”权限集才能“可运行”。这对于二进制可执行文件(例如编译代码)或脚本(例如 Python,Perl...或 shell 脚本)都是如此。
“file”命令不仅依赖于文件后缀,还查看文件本身中的自标识“幻数”或其他“头信息”。
建议:
如果内置的“文件”不满足您的需求;也许你可以把它包装在一个 shell 脚本:
1)检查某些“众所周知的后缀”(使用basename提取后缀),和 / 或
2)调用“文件”作为后备
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(43条)