我想檢查某些文件並查看它們的類型和擴展名是否匹配。我目前所做的是使用文件命令來檢查MIME類型(或文件的基本輸出)並將其與文件擴展名進行比較。但是,某些文件類型返回相同的MIME類型,例如.sfx和.dll。在Linux中檢查文件類型
另外我有一些文件沒有擴展在所有,我應該能夠正確地確定它們的文件類型。
我希望能夠正確地獲取所有文件類型,但是我目前感興趣的最重要的文件類型是;
- DLL
- 微星
- COM
- CPL
- EXE
- OCX
- TMP
- UPD
是否有任何其他檢查並返回文件類型的工具?
編輯
我寫的,可以用來作爲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,作爲結果返回iso。
如果它不是iso,我檢查每個擴展的所有簽名字節序列,我在我的db中針對給定文件查看它們是否匹配。如果我有一場比賽,我會返回結果。
如果我找不到匹配項,我執行文件命令,獲取文件的MIME類型,並使用創建的另一個數據庫將MIME類型與擴展名匹配,以查看它是否匹配。 MIME類型數據庫的格式如下所示;
"application/atom+xml": [
"atom",
"xml"
],
"application/atomcat+xml": [
"atomcat"
],
"application/atomsvc+xml": [
"atomsvc"
]
該解決方案當前滿足我的項目需求。也許這可能會幫助別人。
只能將文件擴展名用作*提示*,文件擴展名不一定正確。此外,只有這麼多的三字母組合可用,許多必須重新用於不同類型的文件。或者如何擴展'.dat'?對於所有類型的數據文件來說,這是一個非常常見的擴展,很少有類似的擴展。 –
至於你列出的文件,那些應該有非常獨特的簽名。這些類型的第幾個字節應該是非常獨特的。 –
這正是我試圖確定文件類型的原因;不信任文件擴展名本身。 – feluna