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은 유닉스 맨페이지에서 "매직 넘버(magic number)"라고 불리는 것에 의해 결정됩니다. 모든 파일에는 파일 유형과 파일 형식을 결정하는 마법의 숫자가 있습니다. 다음은 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

추가 정보를 위한 웹 링크

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

답변2

불행하게도 파일이 올바른 출력을 생성하도록 하기 위해 수행할 수 있는 작업이 없을 수도 있습니다.

file명령은 매직 넘버 데이터베이스에 대해 파일의 처음 몇 바이트를 테스트합니다. 이는 파일 시작 부분에 특정 식별자가 있는 이미지나 실행 파일과 같은 바이너리 파일에서 쉽게 확인할 수 있습니다.

파일이 바이너리가 아닌 경우 인코딩을 확인하고 파일에서 특정 단어를 찾아 유형을 결정하지만 제한된 수의 파일 유형(대부분 프로그래밍 언어)에 대해서만 적용됩니다.

관련 정보