Files

file 命令如何區分文本和 LaTeX 文件?

  • February 13, 2020

我有許多.ipynb文本文件(Jupyter notebooks)。所有這些都包含一些 LaTeX 標記。但是當我執行時file,我得到:

$ file nb_*          
nb_1.ipynb:      ASCII text
nb_2.ipynb:      ASCII text
nb_3.ipynb:      ASCII text, with very long lines
nb_4.ipynb:      LaTeX document, ASCII text, with very long lines
nb_5.ipynb:      text, with very long lines

如何file區分這些?我希望所有文件都具有相同的類型。


(為什麼文件應該具有相同的類型?我正在將它們上傳到線上系統進行共享。系統以某種方式對它們進行分類並以不同方式對待它們,我不可能改變這一點。我懷疑平台使用file或可能在內部使用libmagic和想解決這個問題。)

文件類型辨識由所謂的魔術 模式驅動。用於分析 TeX系列原始碼的魔法文件 包含許多宏名稱,這些名稱會導致文件被歸類為LaTeX。每場比賽都分配了一個 強度,例如 15 in case of\begin和 18 for \chapter。這使得啟發式算法更能抵抗誤報,例如對 Plain TeX 或 ConTeXt 文件的錯誤分類,這些文件恰好用這些名稱定義了自己的宏。

我發現了一個似乎file將文件分類為 LaTeX 的字元串:

$ cat text
a
b
$ cat latex
a
\begin
b
$ file text latex
text:  ASCII text
latex: LaTeX document, ASCII text

所以至少我可以通過向目前分類為文本的文件添加一些環境來強制所有文件具有相同的類型。

引用自:https://unix.stackexchange.com/questions/567338