2017-05-12 7 views

Antwort

4

Wenn Sie wissen, dass Sie auf einem gesunden Unix sind, können Sie einfach einen Systemanruf an file machen.

Wenn Sie eine unabhängige Implementierung benötigen, there are several available on CPAN. Wahrscheinlich am nächsten zu file ist File::MMagic. Dies ist eine eigene Implementierung, so dass es auf jedem System funktioniert, aber möglicherweise nicht genau wie file funktioniert.

$ 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

Berichte 'docx' Datei als zip, aber auch' Datei' Befehl. – CJ7

+0

@ CJ7 Ich wäre nicht überrascht, wenn docx mit zlib komprimiert ist. Möglicherweise müssen Sie dies mit einer Datenbank mit Dateierweiterungen kombinieren. – Schwern

+0

Ich verwende dies nur für Dateien, die aus irgendeinem Grund keine Erweiterungen haben. – CJ7

0

File :: MMagic des built-in magic so kurz ist, ist es nutzlos. Vermeiden.

Verwenden Sie stattdessen File::LibMagic, es ist das beste.

$ 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' 
};