次のように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にできることはありますか?
残念ながら、ファイルに正しい出力を生成させるためにできることはおそらくありません。
file
コマンドは、マジックナンバーのデータベースに対してファイルの最初の数バイトをテストします。これは、ファイルの先頭に特定の識別子があるバイナリファイル(イメージや実行可能ファイルなど)で簡単に確認できます。
ファイルがバイナリファイルでない場合は、エンコーディングをチェックし、ファイル内の特定の単語を探してタイプを判別しますが、限られた数のファイルタイプ(ほとんどはプログラミング言語)のみを検索します。
Mimetypeは、UNIXのマンページで「マジックナンバー」と呼ばれるものによって決定されます。すべてのファイルには、ファイルタイプとファイル形式を決定するマジックナンバーがあります。以下の抜粋は、ファイルコマンドのマニュアルページからの抜粋です。
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のmanページでは、ファイルがマジックナンバーと一致しない場合、テキストファイルはASCII/ISO-8859-x /非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
提案
fileコマンドの代わりにmimetype
コマンドを使用します
mimetype temp.csv
さらに掘り下げるためのウェブリンク
http://unixhelp.ed.ac.uk/CGI/man-cgi?file