2017-05-12 111 views

回答

4

如果你知道你將會是一個理智的Unix系統,那麼你只需要致電file即可。

如果您需要獨立實施,there are several available on CPAN。可能最接近file的是File::MMagic。這是它自己的實現,所以它可以在任何系統上工作,但可能不像file那樣。

$ head test.pl 
#!/usr/bin/env perl 

use strict; 
use warnings; 

$ file test.pl 
test.pl: a /usr/bin/env perl script text executable, ASCII text 

$ perl -wlE 'use File::MMagic; $mm = File::MMagic->new; say $mm->checktype_filename(shift)' test.pl 
x-system/x-unix; executable /usr/bin/env script text 
+0

將'docx'文件報告爲zip,但'file'命令也是如此。 – CJ7

+0

@ CJ7如果docx使用zlib壓縮,我不會感到驚訝。您可能必須將其與文件擴展名的數據庫結合使用。 – Schwern

+0

我只使用這個由於某些原因沒有擴展名的文件。 – CJ7

0

File :: MMagic的built-in magic太短了,沒用。避免。

改爲使用File::LibMagic,這是最好的。

$ perl -mFile::LibMagic -MDDS -E \ 
    'say Dump(File::LibMagic->new 
     ->info_from_filename("Startopia EULA English.docx"))' 
$HASH1 = { 
    description => 'Microsoft Word 2007+', 
    encoding  => 'binary', 
    mime_type => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 
    mime_with_encoding => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=binary' 
};