2017-05-12 14 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' 
}; 
関連する問題