왜 다음이 반환되지 않습니까 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
명령은 매직 넘버 데이터베이스에 대해 파일의 처음 몇 바이트를 테스트합니다. 이는 파일 시작 부분에 특정 식별자가 있는 이미지나 실행 파일과 같은 바이너리 파일에서 쉽게 확인할 수 있습니다.
파일이 바이너리가 아닌 경우 인코딩을 확인하고 파일에서 특정 단어를 찾아 유형을 결정하지만 제한된 수의 파일 유형(대부분 프로그래밍 언어)에 대해서만 적용됩니다.