arquivo comando aparentemente retornando errado tipo MIME

4

Por que o seguinte não retorna text/csv ?

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

Eu usei este exemplo para maior clareza, mas também estou tendo problemas com outros arquivos CSV.

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

Por que o CSV não é um CSV? Existe algo que eu possa fazer para o CSV fazer com que file retorne a coisa "certa"?

    
por Jason Swett 17.02.2015 / 00:08

2 respostas

4

Infelizmente, provavelmente não há nada que você possa fazer para que o arquivo produza a saída correta.

O comando file testa os primeiros bytes de um arquivo em um banco de dados de números mágicos. Isso é fácil de verificar em arquivos binários (como imagens ou executáveis) que possuem alguns identificadores específicos no início do arquivo.

Se o arquivo não for binário, ele verificará a codificação e procurará algumas palavras específicas no arquivo para determinar o tipo, mas apenas para um número limitado de tipos de arquivos (a maioria dos quais são linguagens de programação). .

    
por 17.02.2015 / 01:11
6

Os mimetypes são determinados pelo que as man pages unix chamavam de 'magic numbers'. Em cada arquivo há um número mágico que determina o tipo de arquivo e o formato do arquivo. A extração abaixo é das man pages do comando de arquivos

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.

As páginas man do unix também mencionaram que se o arquivo não combina com um número mágico, o arquivo de texto é considerado ASCII / ISO-8859-x / não-ISO de 8 bits estendido ASCII (formato mais adequado)

 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

Sugestão

use o comando mimetype em vez do comando de arquivo

mimetype temp.csv

link da web para escavação adicional

http://unixhelp.ed.ac.uk/CGI/man-cgi?file
    
por 17.02.2015 / 02:00