我用来/usr/bin/file -i file_path
获取有关我的文件的信息。
我有一个简单的网站项目,其中有几个 js 文件。
当我使用/usr/bin/file -i file_name.js
其中一些时,我得到这个结果:
file_name.js:文本/纯文本;字符集=utf-8
但对于其他一些文件,我得到了这样的结果:
文件名.js: 文本/x-java;字符集=utf-8
由于我使用的质量控制实用程序取决于文件类型,因此这种不一致会导致错误。
为什么会这样呢?我应该检查或排除哪些内容?如何?
答案1
在我的系统上,file
对名称结尾的文件进行了猜测.js
(我不知道其中有多少实际上是 javascript 文件):
$ locate -e0 '*.js' | xargs -r0 file -b --mime-type | sort | uniq -c
60 application/json
18 application/octet-stream
1 application/x-terminfo
1 inode/directory
62 inode/symlink
259 inode/x-empty
1 regular file, no read permission
2 text/csv
220 text/html
13342 text/plain
30 text/x-Algol68
6 text/x-asm
126 text/x-c
32 text/x-c++
41 text/x-java
15 text/x-perl
82 text/x-tex
file
只是通过使用启发式读取文件内容来猜测文件类型。对于 JavaScript、C、C++、Java 源文件等始终没有明确区别的文本文件,猜测往往很疯狂。
AFAICT,唯一报告file
为application/javascript
具有#!
she-bang 引用 Nodejs 解释器的文件。报告为的text/x-java
那些行以 开头import
并以 结尾;
。
请注意,编写在多种语言中有效的代码是一门艺术,称为多语言编码。有一个整体codegolf.stackexchange.com 上有关它的问答类别,这表明在一般情况下并不总是可以从文件内容中确定地识别编程语言。你所能做的就是说:看起来可能是 javascript 或 C++ 等。