fileコマンドが間違ったMIMEタイプを返すようです。

fileコマンドが間違ったMIMEタイプを返すようです。

なぜ以下が返されないのですかtext/csv

$ echo 'foo,bar\nbaz,quux' > temp.csv;file -b --mime temp.csv
text/plain; charset=us-ascii

より明確にするためにこの例を使用していますが、他のCSVファイルにも問題があります。

$ file -b --mime '/Users/jasonswett/projects/client_work/gd/spec/test_files/wtf.csv'
text/plain; charset=us-ascii

なぜCSVがCSVだと思いませんか?file「正しい」結果を返すためにCSVにできることはありますか?

ベストアンサー1

mimetypeはUnixのマンページで「マジックナンバー」と呼ばれるものによって決まります。すべてのファイルには、ファイルの種類とファイルの種類を決定する魔法の数があります。以下は、fileコマンドのマニュアルページから抜粋したものです。

The magic number tests are used to check for files with data in partic-
       ular fixed formats.  The canonical example of this  is  a  binary  exe-
       cutable  (compiled  program)  a.out  file,  whose  format is defined in
       a.out.h and possibly exec.h in the standard include  directory.   These
       files  have  a  'magic  number'  stored  in a particular place near the
       beginning of the file that tells the UNIX  operating  system  that  the
       file  is  a binary executable, and which of several types thereof.  The
       concept of 'magic number' has been applied by extension to data  files.
       Any  file  with  some invariant identifier at a small fixed offset into
       the file can usually be described in this way.  The information identi-
       fying   these   files   is   read   from   the   compiled   magic  file
       /usr/share/file/magic.mgc , or  /usr/share/file/magic  if  the  compile
       file  does  not exist. In addition file will look in $HOME/.magic.mgc ,
       or $HOME/.magic for magic entries.

Unixのマニュアルページでは、ファイルがマジック番号と一致しない場合、テキストファイルはASCII / ISO-8859-x / non-ISO 8ビット拡張ASCII(最も適切な形式)で処理されると言われています。

 If a file does not match any of the entries in the magic    file,  it  is
       examined to see if it seems to be a text file.  ASCII, ISO-8859-x, non-
       ISO 8-bit extended-ASCII character sets (such as those used  on  Macin-
       tosh  and  IBM  PC systems), UTF-8-encoded Unicode, UTF-16-encoded Uni-
       code, and EBCDIC character sets can be distinguished by  the  different
       ranges  and  sequences  of bytes that constitute printable text in each
       set.  If a file passes  any  of  these  tests,  its  character  set  is
       reported.  ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are iden-
       tified as ''text'' because they will be mostly readable on  nearly  any
       terminal

提案

mimetypeファイルコマンドの代わりにコマンドを使用する

mimetype temp.csv

追加情報のためのWebリンク

http://unixhelp.ed.ac.uk/CGI/man-cgi?file

おすすめ記事