`file <file>` 使用哪些指标来确定类似文本文件的类型?

Jac*_*ack 6 files

我有一堆 LaTeX 源文件,都具有相同的结构,都具有 Unix 风格的行结尾,并且都是 UTF-8,大小大致相同(1-2KB),都使用空格进行缩进格式。它们包含在一个更大的文档中,每个文件处理文档中的一个单独部分,每个部分都具有相同的布局(因此每个文件的结构相同,几乎相同的 LaTeX 命令,只是文本内容不同),因此所有文件都直接启动/end 包含许多 LaTeX 命令。现在奇怪的是:

$ file *.tex
file1.tex: LaTeX document, Unicode text, UTF-8 text
file2.tex: CSV text
Run Code Online (Sandbox Code Playgroud)

这只是一小段摘录,CSV 与 LaTeX 的检测完全是随机的,而 CSV 的检测频率稍低(可能 40% CSV,60% LaTeX),但对于每个文件,类型是可重现的。

我尝试改变 CSV 检测到的文件中的一些格式和内容,但它们仍然被检测为 CSV。

这里发生了什么?

Ste*_*itt 11

大多数文件类型检测file基于 \xe2\x80\x9cmagic\xe2\x80\x9d 值,在大量文件中描述;TeX 文件有自己的一套检测方法

\n

然而,CSV 文件的处理方式有所不同,其本身有专用的例程file。这会计算文件前十行中以逗号分隔的字段。如果每行至少有两个字段,并且文件中至少有两行,并且前十行(如果少于十行则为整个文件)的字段数量相同,则该文件被识别为 CSV 文件。

\n

可以使用以下选项禁用 CSV 检测-e

\n
file -e csv -- *.tex\n
Run Code Online (Sandbox Code Playgroud)\n

  • 像 `printf '%s\n' '\begin' | file -` 会告诉你 LaTex but `printf '%s\n' '\begin, now' 'Hi, Jack' | file -` 会告诉你 CSV (2认同)
  • @MC68020 请参阅[“--”(双破折号)是什么意思?](https://unix.stackexchange.com/a/590210),尤其是**⚠️重要**部分。 (2认同)