web-dev-qa-db-ja.com

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

いくつかのファイルを持っています(Jupyterノートブック、.ipynb)テキストファイルです。これらすべてには、いくつかの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 内部的に、これを回避したいと思います。)

13
cheersmate

ファイルタイプの認識は、いわゆるmagicパターンによって駆動されます。 分析用のマジックファイルTeX ファミリのソースコードには、ファイルがLaTeX。各一致には、強度が割り当てられます。 g。 \beginの場合は15、\chapterの場合は18。これにより、それらの名前で独自のマクロを定義することがある、Plain TeXまたはConTeXt文書の誤分類などの誤検知に対するヒューリスティックがより堅牢になります。

28
phg

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

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

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

2
cheersmate