なぜ以下が返されないのですか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
答え2
残念ながら、ファイルに正しい出力を生成させるために実行できる操作がない可能性があります。
このfile
コマンドは、マジック番号データベースに対してファイルの最初の数バイトをテストします。これは、ファイルの先頭に特定の識別子を持つイメージや実行可能ファイルなどのバイナリファイルで簡単に確認できます。
ファイルがバイナリでない場合は、エンコードを確認してファイル内の特定の単語を見つけてタイプを決定しますが、限られた数のファイルタイプ(ほとんどのプログラミング言語)にのみ適用されます。