fileコマンドは、テキストファイルとLaTeXファイルをどのように区別しますか?

fileコマンドは、テキストファイルとLaTeXファイルをどのように区別しますか?

.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内部的には、この問題を解決しようとしています。 )

答え1

ファイルタイプ認識はいわゆる魔法 モデル。これ分析用マジックファイル テックス シリーズのソースコードには、ファイルを次のように分類する多くのマクロ名が含まれています。エマルジョン。各ゲームには1つずつ割り当てられます。 たとえば、15は\begin、18はを意味します \chapter。これは、これらの名前で独自のマクロを定義するPlain TeX文書やConTeXt文書の誤分類など、偽の肯定に対してヒューリスティックをより強力にします。

答え2

fileファイルをLaTeXとして分類しているように見える文字列が見つかりました。

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

したがって、少なくとも現在のテキストとして分類されているファイルにいくつかの環境を追加して、すべてのファイルを同じ種類にすることができます。

関連情報